Skip to content

[FIX] account_ux: express leftover residual in secondary currency on reconcile_on_company_currency#977

Open
cav-adhoc wants to merge 1 commit into
ingadhoc:18.0from
adhoc-dev:18.0-h-120245-cav
Open

[FIX] account_ux: express leftover residual in secondary currency on reconcile_on_company_currency#977
cav-adhoc wants to merge 1 commit into
ingadhoc:18.0from
adhoc-dev:18.0-h-120245-cav

Conversation

@cav-adhoc

Copy link
Copy Markdown
Contributor

Problema

Con reconcile_on_company_currency activo, al conciliar un apunte en moneda de compañía contra uno en moneda secundaria, el override de _prepare_reconciliation_single_partial:

  1. "Sombrea" la moneda secundaria y llama a super() con no_exchange_difference=True para conciliar en moneda de compañía.
  2. Reconvierte los partial_values (lo consumido) a la moneda secundaria real a la cotización del comprobante.

Pero deja el residual sobrante (amount_residual_currency en los debit_values/credit_values devueltos) expresado en moneda de compañía. Los consumidores de ese residual —en particular el wizard de conciliación/ajuste (account.reconcile.wizard)— interpretan esa magnitud en moneda de compañía como si fuera moneda secundaria y la multiplican por el tipo de cambio, proponiendo un ajuste (write-off) groseramente inflado.

Ejemplo: una diferencia de redondeo de 624,79 (moneda de compañía) aparece en el wizard como 624,79 de moneda secundaria y termina convertida a ~900.010 de moneda de compañía.

Solución

Reexpresar el residual sobrante en la moneda secundaria a la misma cotización usada para el partial. De paso se corrige un bug latente que redondeaba el residual del débito con la moneda del apunte crédito en vez de la del débito (afecta el caso de dos apuntes con moneda secundaria).

Test plan

  • Nuevo test account_ux/tests/test_reconcile_on_company_currency.py: arma el escenario (compañía AR con reconcile_on_company_currency, apunte en moneda de compañía vs. apunte en moneda secundaria con diferencia de redondeo) y verifica que el residual devuelto queda en la moneda secundaria.
  • Verificado que el test falla sin el fix (-0.5 != -500.0) y pasa con el fix.
  • Suite completa de account_ux en verde (6 tests).

@roboadhoc

Copy link
Copy Markdown
Contributor

Pull request status dashboard

…reconcile_on_company_currency

When reconcile_on_company_currency reconciles a company-currency line
against a foreign-currency one, the override shadows the secondary
currency, reconciles in company currency and then converts the
partial_values back to the real secondary currency at the voucher rate.

However it left the leftover residual (amount_residual_currency in the
returned debit/credit values) expressed in company currency. Downstream
consumers of that residual -notably the reconcile/write-off wizard
(account.reconcile.wizard)- then read the company-currency magnitude as
if it were the secondary currency and multiplied it by the exchange
rate, proposing a hugely inflated write-off (e.g. a 624.79 ARS rounding
difference shown as 624.79 USD -> 900,010 ARS).

Convert the leftover residual to the secondary currency at the same rate
used for the partial. Also fixes a latent bug that rounded the debit
residual with the credit line currency instead of the debit one.

Adds a regression test reproducing the scenario.
@cav-adhoc cav-adhoc force-pushed the 18.0-h-120245-cav branch from 196fc4e to ec4f04e Compare June 23, 2026 19:28
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.

2 participants