Skip to main content

Reconciliación V2

Movimientos contables (GL / JournalItem) VS Los movimientos importados (Import / ReconciliationImport).

Casos de Uso​

En cada caso hay una tabla con los movimientos emparejados. Los colores marcan exactamente qué parte del texto coincide entre ambos lados — cuando dos celdas tienen la misma parte pintada del mismo color, esa es la coincidencia que hizo el match.

Color¿Qué marca?
VerdeEl valor que suma cero entre ambos lados del par
AmarilloLa Reference (o parte de ella) que aparece incrustada dentro del History
AzulLa Reference que es idéntica en ambos lados
NaranjaLa fecha del asiento coincidente
PúrpuraEl prefijo de cheque que junta ambos lados

Caso 1 — Match 1:1 por Reference contenida en el History​

Título: "Encontré un pago cuyo número de referencia aparece escrito dentro de la descripción del asiento contable".

Cuándo aplica: El extracto trae un Reference (por ejemplo TRX-98765) y el asiento del GL menciona esa misma cadena dentro de su Description. Los montos deben ser exactamente opuestos.

Ejemplo:

OrigenReferenceDescriptionValor
ImportTRX-98765Depósito cliente Acme+1.500,00
GLJV-0012Cobranza factura TRX-98765 Acme−1.500,00

¿Qué coincide?

  • 🟡 TRX-98765 del Import aparece dentro del History del GL.
  • 🟢 1.500,00 es idéntico en valor absoluto, con signos opuestos.

Caso 2 — Match 1:1 GL ↔ Import por valor exactamente opuesto​

Título: "Cuadro un asiento con un movimiento importado porque tienen el mismo importe con signo contrario".

Cuándo aplica: El criterio obligatorio es que los montos se anulen (mismo importe con signo contrario). A ese match base se le pueden sumar filtros opcionales según los parámetros de entrada, y los ejemplos de abajo muestran cada uno por separado — pero en la ejecución real los flags son acumulables: si activas dos, ambos filtros se aplican a la vez. Los items ya usados en el Caso 1 quedan excluidos.

Filtro opcionalFlag que lo activaQué exige adicionalmente
Fecha@isByJournalDate = 1Misma JournalDate en ambos lados
Referencia@isByReference = 1Misma Reference exacta
Cheque@isByCheckNumber = 1GL.Reference empieza con CH-<Import.Reference>

Ejemplo básico (sin filtros opcionales)​

OrigenReferenceFechaValor
GLJV-0452026-03-10+2.300,00
ImportBK-7782026-03-11−2.300,00

¿Qué coincide?

  • 🟢 2.300,00 con signos opuestos suma cero. Único criterio.

Ejemplo con @isByJournalDate = 1 (exigir misma fecha)​

OrigenReferenceFechaValor
GLJV-0452026-03-10+2.300,00
ImportBK-7782026-03-10−2.300,00

¿Qué coincide?

  • 🟠 2026-03-10 — misma fecha.
  • 🟢 2.300,00 — valor opuesto.

Ejemplo con @isByReference = 1 (exigir misma referencia)​

OrigenReferenceFechaValor
GLINV-2026-0422026-03-10+2.300,00
ImportINV-2026-0422026-03-11−2.300,00

¿Qué coincide?

  • 🔵 INV-2026-042 — misma referencia exacta.
  • 🟢 2.300,00 — valor opuesto.

Ejemplo con @isByCheckNumber = 1 (prefijo de cheque)​

Prefijo configurado en @referenceCheck = 'CH'. El GL debe empezar con CH-<Reference-del-Import>.

OrigenReferenceValor
GLCH-1200-A+800,00
Import1200−800,00

¿Qué coincide?

  • 🟣 CH- es el prefijo obligatorio del cheque.
  • 🔵 1200 es el número que viene del Import y aparece justo después del prefijo en el GL.
  • 🟢 800,00 con signos opuestos.

Caso 3 — Match 1:1 GL ↔ Import por valor opuesto con hasta 5 días de diferencia​

Título: "Cuadro un asiento con un movimiento importado que tiene el importe contrario, cuando el banco lo registró con unos pocos días de diferencia".

Cuándo aplica: Su única regla es que los montos se anulen (mismo importe con signo contrario) y que las fechas de ambos lados no disten más de 5 días naturales. No usa @isByJournalDate ni ningún otro filtro opcional; no mira referencia ni cheque. Cuando hay varios candidatos, gana el de fecha más cercana para mantener un match limpio 1:1. Los items ya usados en los Casos 1 y 2 quedan excluidos.

Ejemplo:

OrigenReferenceFechaValor
GLJV-0302026-03-10+1.200,00
ImportBK-6602026-03-14−1.200,00

¿Qué coincide?

  • 🟢 1.200,00 con signos opuestos suma cero.
  • 🟠 2026-03-10 vs 2026-03-14 — 4 días de diferencia, dentro de la ventana de 5 días.

Caso 4 — Match 1:1 GL ↔ Import por valor opuesto (cierre)​

Título: "Empato lo que quedó suelto: un asiento contable con un movimiento importado del mismo importe y signo contrario, sin ninguna otra condición".

Cuándo aplica: Es el paso final. Empareja 1:1 un GL con un Import del mismo valor absoluto y signo contrario (sus valores suman cero), sin exigir fecha, referencia ni número de cheque. Siempre es GL contra Import, así que un Import nunca se concilia con otro Import. Cuando hay varios del mismo importe se emparejan por orden de aparición; si sobra un movimiento sin contraparte opuesta (por ejemplo dos +100 contra un solo −100), ese sobrante queda sin conciliar. Los items ya usados en los Casos 1, 2 y 3 quedan excluidos.

Ejemplo:

OrigenReferenceValor
GLJV-210+500,00
ImportBK-880−500,00

¿Qué coincide?

  • 🟢 500,00 — mismo valor absoluto con signos opuestos, así que suman cero.
  • Es el mismo criterio de valor del Caso 2, pero sin filtros opcionales ni posición ordinal: recoge los pares GL ↔ Import que quedaron pendientes.

Caso 5 — Match 1:1 GL ↔ GL por valor opuesto​

Título: "Dos asientos contables se anulan entre sí sin necesidad de un movimiento importado".

Cuándo aplica: Reversos contables o traspasos internos que no llegan al banco. Empareja 1:1 un GL positivo con un GL negativo del mismo valor absoluto y signo contrario (suman cero). Ningún Import participa. Los items ya usados en los Casos 1 a 4 quedan excluidos.

Ejemplo:

OrigenReferenceValor
GL (+)JV-100+4.200,00
GL (−)JV-101-REV−4.200,00

¿Qué coincide?

  • 🟢 4.200,00 — mismo valor absoluto con signos opuestos entre dos asientos contables.

Orden y prioridad de ejecución​

Cada paso opera sólo sobre los items que quedaron libres después del paso anterior. Todos los casos son emparejamientos 1:1 en los que los dos movimientos se anulan por signo opuesto (mismo valor absoluto, signos contrarios). Los Casos 1 a 4 son siempre 1 Import ↔ 1 GL, y se distinguen por el criterio adicional: referencia dentro del History (Caso 1), valor + filtros opcionales (Caso 2), ventana de fechas (Caso 3) y solo valor como cierre (Caso 4). El Caso 5 es 1 GL ↔ 1 GL (reversos contables). En ningún caso se concilia Import con Import.

Cómo se guarda el resultado​

Cuando hay al menos un grupo armado, el procedimiento lo persiste en la tabla dbo.Reconciliation:

  • Toma el NextReconciliationCode de ReconciliationConfig y lo incrementa por la cantidad de grupos creados, de modo que cada grupo recibe un código correlativo propio.
  • Inserta una fila por cada movimiento del grupo con:
    • JournalItemId (si el movimiento es GL) o ReconciliationImportId (si es Import).
    • El Code del grupo, la ReconciliationDate y el ReconciliationByUserName.
    • IsConfirmed = 0, es decir, la conciliación queda pendiente de confirmación.
    • IsRoot, que marca el movimiento principal del grupo (en los pares 1:1 es el lado que corresponde según la naturaleza de la cuenta; en el Caso 4 es el primer miembro del grupo).