coodesoft/soporte/ecocontrol-soporte#20_TC_RC_OP
Permite pagar en una sola orden una factura en dolares al tipo de cambio del comprobante y ademas un excedente que queda abierto para conciliar despues contra una nota de debito o de credito.
Hasta ahora habia que hacer dos ordenes de pago separadas. Metiendo las dos cosas en una sola, la diferencia de cambio no se asentaba y quedaban importes colgados.
El motivo esta en account_move.py, dentro de reconcile():
if involved_lines[0].currency_id and all(...):
is_full_needed = all(line.currency_id.is_zero(line.amount_residual_currency) ...)
else:
is_full_needed = all(line.company_currency_id.is_zero(line.amount_residual) ...)
if is_full_needed:
exchange_move = involved_lines._create_exchange_difference_move()
La diferencia de cambio solo se asienta si TODO lo que entra en la conciliacion queda en cero. El excedente nunca queda en cero -ese es su proposito- asi que bloqueaba el asiento para el conjunto entero.
La orden de pago ahora identifica sus pagos de excedente (los que cubren exactamente unreconciled_amount, prefiriendo los que estan en la moneda de la compania) y los avisa por contexto. account.move.line.reconcile los deja afuera. Sin esa clave de contexto el metodo no hace nada.
Si los pagos no suman exactamente el excedente no se excluye ninguno: es preferible el comportamiento de siempre a dejar abierto un importe que nadie pidio.
Verificado en el entorno local. Factura de USD 100 asentada a 900 (90.000 ARS), pagada en UNA orden con una linea de USD 100 forzada a 100.000 (TC 1000) mas 20.000 de excedente:
factura residuo 0, conciliada linea de la deuda residuo 0, conciliada linea excedente 20.000 abiertos, sin conciliar EXCH/2026/09/0004 10.000 a Diferencias de cambio
Control: una orden en pesos sin excedente concilia como siempre.
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com