Skip to main content
Glama
Abishai95141

fincon

by Abishai95141

Cierra los libros con una prueba, no con un parche.

FinCon concilia lo que tu pasarela de pago dice haber pagado contra lo que el banco recibió realmente, asienta el doble juego, y devuelve lo que queda — clasificado, valorado y enrutado a un puesto. Cada coincidencia lleva una aritmética que un auditor puede re-derivar sin nosotros.


El problema

El software de conciliación ya empareja el 90–99% de las transacciones. Trintech publica un 99%+. NetSuite incorpora reglas N:M con un asistente de puntuación de confianza. Ese problema está resuelto, y cualquier propuesta que venda "nuestra IA empareja mejor" compite en la única dimensión en la que nadie necesita ayuda.

Dos costes sobreviven a la automatización, y ninguno es un problema de emparejamiento.

La cola vuelve sin ninguna razón adjunta. La automatización del feed bancario reduce una conciliación de unos 47 minutos a solo gestión de excepciones — y eso lo dice todo en una sola estadística: los registros emparejados nunca fueron el coste. Pero el 1–10% que falla vuelve como una cola plana, y el controller re-deriva el contexto a mano, fila a fila. El volumen bajó. El coste por partida no.

Y la tasa decae. Las tasas de auto-emparejamiento se mantienen, no se logran. Un nuevo formato de proveedor degrada silenciosamente el emparejamiento hasta que alguien escribe una regla, y la creación de reglas está bloqueada detrás de ingeniería — así que la persona que entiende la excepción nunca es la persona que puede arreglarla.

Lo que hace un controller hoy: extraer tres exportaciones, emparejar a nivel de pago porque a nivel de fila es imposible, contabilizar la diferencia como un parche, pasar tres días en Excel cuando no cuadra, teclear el asiento a mano, y ver cómo la misma cola vuelve el mes siguiente.


Related MCP server: MCP-Finance-Reconciliation

La solución

Entrada abierta, compromiso verificado. El modelo propone. Un motor determinista demuestra. Un humano con nombre decide.

La IA hace tres trabajos, y son los tres que la necesitan

Esto no es un motor de reglas con un chatbot pegado, ni es un modelo adivinando aritmética. El modelo apunta exactamente al trabajo que ningún sistema determinista puede hacer:

Lee un formato que nadie configuró

Un archivo de liquidación con una estructura que nunca hemos visto. El modelo lee doce líneas en bruto y redacta la especificación de parseo — delimitador, fila de cabecera, unidades menores, una fecha no ISO. Lo ingiere sin proyecto de integración.

Nombra la cola

Lo que la aritmética no pudo resolver va al modelo con los casi-aciertos que el motor derivó, y vuelve con un código, una hipótesis y evidencia citada en unos 2,1s.

Escribe la regla de mañana

Resuelves un desajuste con tus propias palabras; el modelo induce una regla determinista que lo habría evitado. R-DUP-06 se escribió así, a partir de la frase de un controller, y se dispara en cada cierre desde entonces.

El sistema se vuelve más determinista con el tiempo, no más agéntico. Eso es lo contrario de cómo suelen envejecer los productos de agentes, y es toda la tesis.

Y está vallado, que es por lo que puedes activarlo

Los modelos de lenguaje caen de 95,6% en búsquedas a casi cero en cálculo multivariable, y fallan con confianza. Así que el modelo se mantiene fuera de la aritmética por construcción — cada frontera de abajo es una prueba que falla si alguien la elimina:

  • Ninguna llamada al modelo en un cierre. Seis etapas, cero llamadas al modelo, y el recibo lo dice.

  • Una propuesta no puede sobrescribir una respuesta derivada. P2 como máximo, y no puede sobrescribir P0 ARITHMETIC — una partida que el motor derivó ni siquiera se ofrece.

  • Ningún código generado se ejecuta. Sin eval, sin exec. Los adaptadores son especificaciones declarativas leídas por un vocabulario cerrado de verbos de parseo.

  • Ninguna herramienta tiene autoridad. Ni una sola herramienta MCP acepta una política, una tolerancia, una convención de signos o un conjunto de reglas — verificado contra los esquemas generados.

Prueba en cada fila, y cuatro finales honestos

Cada coincidencia aceptada emite un objeto aritmético, no una puntuación de confianza: los ids de registro de ambos lados, el residual que cierra a cero, la tolerancia consumida, la regla que se disparó. Una coincidencia sin una prueba que pase no es una coincidencia y no aparece en el recuento de coincidencias.

match M-0412   tier T2 subset-sum   rule R-017@v3
  payout    BANK/2026-08-14/CR         +4,378.21
  charges   87 × settlement rows       +4,612.90
  refunds    4 × settlement rows         -118.40
  fees     162 × settlement rows         -114.02
  ────────────────────────────────────────────
  residual                                  0.00    tolerance used 0.00 / 0.50
  verdict   PROVEN      provenance  P0 ARITHMETIC

Todo lo que queda se clasifica por impacto de caja × antigüedad y se enruta a un puesto. Cada partida termina en doble juego — contabilízala, arrástrala, persíguela o castígala — bajo tu nombre, acotada dos veces por política firmada.


Impacto

Medido contra etiquetas creadas antes de que existiera el motor, y re-derivado solo a partir del registro de decisiones:

Auto-emparejamiento

90,9% — 20 de 22 anclas, por nivel T0=17 T1=2 T4=1

Falsas coincidencias

0,00%

Cobertura de excepciones

6 / 6 — todos los defectos plantados encontrados

Clasificación

4 / 6 correctas

Ambigüedad

1 / 1 detectada y rechazada en lugar de adivinada

Asiento

23 apuntes, cuadrado — y la exportación beancount es recargada por el propio beancount

Tiempo de cierre

unos 1,4s, con cero llamadas al modelo

La generalidad se mide, no se afirma. Una segunda conciliación — el Form 26AS del Income Tax Department contra un libro mayor de cuentas por cobrar de TDS, emparejado por TAN + sección + trimestre en un año de abril a marzo — se ejecuta en el mismo motor con cero cambios en él, verificado byte a byte por su gate.

Donde dice que no sabe. Cuatro de siete partidas en un cierre real son E14el motor no puede decir por qué — y eso se imprime al principio de la cola en lugar de suavizarse en una suposición plausible enrutada al puesto equivocado. E09 es en la que hay que detenerse: dos subconjuntos distintos suman el mismo abono dentro de la tolerancia, así que no hay una respuesta correcta que elegir, y toda herramienta que devuelve el primer subconjunto que encuentra está confiadamente equivocada ahí.


Apunta un asistente a ello — MCP

FinCon es un servidor de Model Context Protocol. Pregunta "¿qué está bloqueando el cierre de octubre, de mayor a menor?" y lee el registro, ejecuta un cierre determinista, verifica una prueba, resuelve una partida y firma — como tú, porque tiene un token que tú emitiste.

// Claude Desktop, Claude Code, or any MCP client
{
  "mcpServers": {
    "fincon": { "url": "https://fincon.astutecomputer.com/mcp" }
  }
}

OAuth vía Cognito, descubrimiento en el origen según RFC 9728, registro dinámico de clientes. O ejecútalo en stdio contra tus propios archivos: make mcp.

21 herramientas; 4 de ellas escriben. Un asistente no es un extraño — lleva tu credencial, y el sub de ese token es la misma cadena a la que resuelve tu sesión de navegador. Así que puede hacer lo que tú puedes hacer, y cada decisión registra la puerta por la que entró, de modo que dentro de un año puedes saber qué partidas leíste tú y cuáles delegaste. Los límites que importan — el techo de castigos, el presupuesto, la comprobación de saldo, las partidas que nadie ha abierto — nunca fueron preguntas sobre quién llamaba, y atan a un agente de forma idéntica.


Arquitectura

El modelo propone → el motor demuestra → un humano decide. Nada cruza una frontera sin una prueba o un nombre.

  SOURCES                    ENGINE  (no model, ever)                 RECORD
  ─────────                  ────────────────────────                 ──────
  bank CAMT.053 ┐            ┌──────────────────────┐
  settlement    ├─ intake ──▶│ block → match         │──▶ verify ──┐
  order register┘   │        │ T0 exact              │   re-derive │
  Form 26AS     ┘   │        │ T1 tolerant           │   from raw  │
                    │        │ T2 subset-sum         │   records   │
              5 proofs       │ T4 declared           │             ▼
              row count      └──────────┬───────────┘      ┌──────────────┐
              control total             │                  │ double entry │
              roll-forward         unmatched               │ + balance    │
              type/domain              │                   │   assertion  │
              idempotence              ▼                   └──────┬───────┘
                              ┌────────────────┐                  │
                              │ near-miss      │                  ▼
                              │ diagnosis      │           hash-chained
                              │ (arithmetic)   │           decision log
                              └───────┬────────┘                  │
                                      │ genuinely unexplained     │
                                      ▼                           │
                        ╔═════════════════════════╗               │
                        ║  MODEL  (proposes only) ║               │
                        ║  adapter synthesis      ║               │
                        ║  classification         ║               │
                        ║  rule induction         ║               │
                        ╚═══════════╤═════════════╝               │
                                    │ P2 at best, never overwrites P0
                                    ▼                             │
                        ┌───────────────────────┐                 │
                        │  HUMAN decides        │◀────────────────┘
                        │  book · carry · chase │
                        │  · write off · sign   │
                        └───────────┬───────────┘
                                    ▼
                          close pack · journal.csv
                          journal.beancount · POST /v1/verify

Niveles de prueba, porque un cierre real contiene partidas que nadie puede derivar solo con aritmética. La regla es nunca moverse en silencio, no rechazar lo que no puedes probar:

P0 ARITHMETIC re-derivable por cualquiera · P1 RULE se disparó una regla promocionada y probada por regresión · P2 ATTESTED un humano con nombre lo aprobó · P3 DECLARED aceptado con una brecha declarada.

Alojado en AWS

En vivo en https://fincon.astutecomputer.com — una pila de CloudFormation en ap-south-1. Desglose completo, incluidas las cuatro decisiones que merecen discusión y lo que este entorno deliberadamente no tiene, en docs/14-AWS.md.

   Cloudflare DNS ──▶ ALB (ACM, TLS 1.3) ──▶ ECS Fargate ──┬─▶ EFS  runs + uploads
                       :80 → :443           1 task          ├─▶ Cognito   identity
                       /healthz 30s         256cpu/512mb    ├─▶ Secrets Manager
                                            screens · API   └─▶ CloudWatch Logs
                                            · MCP /mcp

EFS en lugar de S3 porque el registro de decisiones es de solo añadidura y está encadenado por hash, y el escritor toma un bloqueo POSIX — y flock silenciosamente no funciona en EFS, lo que casi acaba con la elección. Subredes públicas, sin NAT — una pasarela de 32 $/mes para un entorno de una sola tarea, cambiada por un grupo de seguridad que solo admite el ALB. Imágenes etiquetadas por sha de commit, nunca latest, para que un rollback tenga nombre.


Ejecútalo

make setup     # uv sync
make gen       # regenerate the synthetic batches from a seed
make verify    # every green gate
make serve     # → http://127.0.0.1:8000/
make eval      # 4 ablation arms, 9 metrics, batches A and B
make mcp       # MCP on stdio

make test y make verify no necesitan clave API — los gates respaldados por modelo están excluidos y nombrados en la salida, porque un gate omitido en silencio que se lee como verde es el fallo del que trata todo este repositorio.


Verifícalo sin nosotros

La afirmación no es "confía en nuestros números". Entrega a un auditor el registro de decisiones y los archivos fuente, y re-deriva cada coincidencia en un endpoint público que no necesita cuenta y no toca ninguno de nuestros estados:

curl -X POST https://fincon.astutecomputer.com/v1/verify \
     -H 'content-type: application/json' -d @proof.json

Cada veredicto nombra la política bajo la que se produjo y sella si esa política estaba en vigor o suministrada por el llamante — porque un veredicto producido bajo una política que alguien trajo consigo nunca debe volver indistinguible de uno producido bajo la nuestra.


Lo que aún no puede hacer

Un README que solo enumera lo que funciona es un folleto.

  • Validado a pequeña escala — cientos de filas, dos pasarelas, una moneda.

  • Cuatro de siete rupturas siguen sin nombre. Reportadas, no adivinadas.

  • La cola no recuerda. Una ruptura tiene huella de contenido, por lo que la misma es reconocible el próximo mes — pero nada dice todavía "cuarto mes consecutivo".

  • settlement_3way une dos tramos, no tres. Pasarela ↔ banco está hecho; registro de pedidos ↔ pasarela es lo siguiente, y ahí es donde se esconde la fuga de ingresos.

  • Un modelo, un prompt, un proveedor, y el mismo autor escribió el generador y el motor — por lo que el conjunto adversarial está congelado y existe la suite de mutaciones.


Documentación

CLAUDE.md

Contexto permanente: las reglas, el vocabulario, los ocho invariantes

STATUS.md

Estado de compilación en vivo, con la salida de comandos que prueba cada puerta

docs/01-DECISION-SPEC.md

Problema, solución, compensaciones

docs/08-AS-BUILT.md

Lo que realmente se ejecuta hoy

docs/10-THE-USER-FLOW.md

El flujo, y lo que vale

docs/13-THE-SCREENS.md

Cada pantalla, y la pregunta que responde

docs/14-AWS.md

El patrimonio de AWS, en su totalidad

docs/decisions/

ADR: dos de ellos irreversibles

Prueba FinCon →  ·  Contacto

Install Server
F
license - not found
B
quality
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Automates month-end close reconciliation tasks including bank statement matching, GL account reconciliation, intercompany balance checking, and close task tracking.
    1
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    An accounting-ops agent that reconciles payments against open orders, auto-books provably safe payments through a deterministic policy gate, and escalates exceptions to a human queue with audit trails.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Deterministic verification for AI-generated analysis. Reconciliation, consistency and Excel-integrity checks that stop the line when the numbers don't add up.
    1
    MIT

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Abishai95141/FinCon'

If you have feedback or need assistance with the MCP directory API, please join our Discord server