Skip to content

Añadir BankStatementMatcher: conciliación de extractos bancarios - #2013

Open
lanzalibre wants to merge 1 commit into
NeoRazorX:masterfrom
lanzalibre:feature/bank-statement-matcher
Open

Añadir BankStatementMatcher: conciliación de extractos bancarios#2013
lanzalibre wants to merge 1 commit into
NeoRazorX:masterfrom
lanzalibre:feature/bank-statement-matcher

Conversation

@lanzalibre

@lanzalibre lanzalibre commented Jul 16, 2026

Copy link
Copy Markdown

Descripción

Añade Core/Lib/Accounting/BankStatementMatcher: conciliación de extractos bancarios contra el libro diario:

$resultado = BankStatementMatcher::match([
    ['fecha' => '2026-07-01', 'importe' => 1250.00, 'concepto' => 'transferencia cliente'],
    ['fecha' => '2026-07-03', 'importe' => -89.90, 'concepto' => 'recibo luz'],
], ['codsubcuenta' => '572', 'codejercicio' => '2026', 'days' => 3]);
// => ['matched' => [...], 'unmatched' => [...]]
  • Cada línea del extracto (fecha + importe) se empareja con la partida más cercana en fecha dentro de una tolerancia de días (3 por defecto) cuyo importe coincida (±0.005).
  • Importes positivos casan con el debe (entradas) y negativos con el haber (salidas).
  • Cada partida solo se empareja una vez (un cargo duplicado en el extracto queda como pendiente).
  • Filtros opcionales por subcuenta/prefijo (p. ej. 572) y ejercicio.
  • La aritmética de fechas se hace en PHP, sin funciones SQL específicas de motor (portable MySQL/MariaDB/PostgreSQL).

Devuelve las líneas emparejadas (con idpartida, idasiento, fecha, subcuenta, concepto y distancia en días) y las pendientes — la base para detectar apuntes que faltan o cargos no contabilizados.

Tests unitarios incluidos (Test/Core/Lib/BankStatementMatcherTest.php)

  1. testMatchesByAmountAndSign — el importe positivo casa con la partida del debe, el negativo con la del haber, y una línea sin correspondencia queda como pendiente.
  2. testDateTolerance — una línea fechada 2 días después del asiento casa con la tolerancia por defecto (3) y no con tolerancia de 1 día; comprueba la distancia devuelta.
  3. testEachPartidaMatchesOnce — dos líneas idénticas del extracto contra una sola partida: solo una casa.
  4. testSubaccountFilter — con el filtro de subcuenta correcto casa; filtrando por otra subcuenta no.

¿Cómo has probado los cambios?

  • He revisado mi código antes de enviarlo.
  • He probado que funciona correctamente en mi PC.
  • He probado que funciona correctamente con una base de datos vacía.
  • He ejecutado los tests unitarios (los 4 nuevos pasan; phpcs sin avisos).

Empareja las líneas de un extracto (fecha + importe) con las partidas del
libro diario dentro de una tolerancia de días: importes positivos contra
el debe, negativos contra el haber, cada partida una sola vez. Devuelve
las líneas emparejadas y las pendientes.
@lanzalibre
lanzalibre force-pushed the feature/bank-statement-matcher branch from ae24ad9 to c22fe8f Compare July 16, 2026 18:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant