Skip to content

Retenciones de Ganancias en Ordenes de Pago

Modulo: CtaCte (Cuenta Corriente) Tipo: Process Estado: Planificado Fecha: 2025-12-16


Descripcion

Problema que resuelve

Al registrar ordenes de pago a proveedores, la empresa actua como agente de retencion fiscal y debe aplicar retenciones de ganancias sobre los montos pagados cuando corresponda. La funcionalidad actual de ordenes de pago no contempla el registro de estas retenciones de ganancias, lo que genera los siguientes problemas:

  • Falta de cumplimiento fiscal: No se registran las retenciones que la empresa esta obligada a informar y pagar al fisco
  • Sin control de acumulados por periodo: No se puede determinar cuanto se ha pagado a cada proveedor por mes/año para calcular retenciones futuras
  • Descontrol en cuenta corriente: El saldo del proveedor no refleja correctamente el monto neto pagado versus las retenciones aplicadas
  • Inconsistencia en tesoreria: Las retenciones representan dinero que queda en poder de la empresa y no se registra como ingreso
  • Dificultad en conciliacion: Sin el registro de retenciones, es complejo conciliar los movimientos de cuenta corriente con los pagos efectivos
  • Falta de trazabilidad: No se puede determinar cuanto se retuvo en cada pago ni el concepto de la retencion

Solucion propuesta

Se implementa un sistema que registra retenciones de ganancias al momento de crear una orden de pago. El proceso contempla un flujo secuencial de registraciones que garantiza la coherencia contable y financiera:

  1. Registro de orden de pago: Se registra el pago principal al proveedor como movimiento de cuenta corriente
  2. Acumulacion de montos por periodo: Se registra o actualiza el acumulador mensual de pagos al proveedor por concepto de ganancia
  3. Evaluacion de retencion: Se determina si corresponde retener segun el monto minimo del concepto y el acumulado del periodo
  4. Registro de retenciones en cuenta corriente: Si corresponde retener, cada retencion de ganancia genera un movimiento contrario (en terminos de debe/haber) al movimiento de la orden de pago
  5. Registro del detalle de ganancia: Si corresponde retener, se registra el concepto, monto y certificado de cada retencion de ganancia
  6. Registro en tesoreria: Las retenciones de ganancia se registran como INGRESO en tesoreria, ya que el dinero retenido queda en poder de la empresa

Nota importante: El proceso SIEMPRE actualiza el registro de acumulados mensuales por cada orden de pago, pero solo registra el detalle de retenciones cuando el monto acumulado supera el minimo establecido para el concepto de ganancia.

Valor de negocio

  • Cumplimiento fiscal: Registro correcto de retenciones para informes fiscales y declaraciones juradas
  • Control de acumulados: Seguimiento mensual de pagos por proveedor y concepto para calcular retenciones futuras
  • Control financiero: Visibilidad completa del flujo de caja, separando pagos de retenciones
  • Precision contable: Movimientos de cuenta corriente que reflejan el pago neto real al proveedor
  • Trazabilidad completa: Historial de retenciones por orden de pago, proveedor, concepto y periodo
  • Conciliacion simplificada: Facilita la conciliacion entre cuentas corrientes, tesoreria y contabilidad
  • Gestion de montos minimos: Acumula pagos sin retener hasta alcanzar el umbral minimo por periodo

Contexto del sistema

Esta funcionalidad se integra en el flujo de pago a proveedores y se relaciona con:

  • Ordenes de Pago: Registro principal del pago al proveedor
  • Cuenta Corriente de Proveedores: Movimientos de debe/haber que reflejan el estado de cuenta
  • Conceptos de Ganancia: Configuracion de los tipos de retenciones aplicables (incluye monto minimo no sujeto a retencion)
  • Acumulados de Ganancia: Registro mensual de pagos acumulados por proveedor y concepto
  • Detalles de Ganancia: Registro de retenciones efectivamente aplicadas con certificados
  • Tesoreria: Registro de ingresos por retenciones y egresos por pagos
  • Comprobantes de Compra: Facturas y notas de debito asociadas a las ordenes de pago

Proceso de Negocio

Flujo principal de registro de orden de pago con retenciones de ganancias

+---------------------------------------------------------------------------------+
|    FLUJO DE REGISTRO DE ORDEN DE PAGO CON RETENCIONES DE GANANCIAS             |
+---------------------------------------------------------------------------------+
|                                                                                  |
|  1. USUARIO INICIA REGISTRO DE ORDEN DE PAGO                                     |
|     +-- Selecciona proveedor y comprobante(s) a pagar                           |
|     +-- Indica el monto total de la orden de pago                               |
|     +-- Selecciona concepto(s) de ganancia aplicables al pago                   |
|     +-- Indica monto base por cada concepto de ganancia                         |
|                    |                                                             |
|                    v                                                             |
|  2. SISTEMA CALCULA Y MUESTRA RESUMEN                                            |
|     +-- Monto de la orden de pago                                               |
|     +-- Retenciones calculadas por concepto                                     |
|     +-- Monto neto a pagar al proveedor                                         |
|                    |                                                             |
|                    v                                                             |
|  3. USUARIO CONFIRMA REGISTRO                                                    |
|     +-- Valida los datos presentados                                            |
|     +-- Confirma la operacion                                                   |
|                    |                                                             |
|                    v                                                             |
|  4. SISTEMA REGISTRA ORDEN DE PAGO                                               |
|     +-- Crea movimiento de cuenta corriente (DEBE - cancela deuda del proveedor) |
|                    |                                                             |
|                    v                                                             |
|  5. SISTEMA ACTUALIZA ACUMULADORES POR PERIODO                                  |
|     +-- Por cada concepto de ganancia del pago:                                 |
|         +-- Obtiene mes/año actual                                              |
|         +-- Busca acumulador existente (proveedor + mes + año + concepto)       |
|         +-- Si existe: incrementa monto acumulado                               |
|         +-- Si no existe: crea nuevo registro con monto inicial                 |
|                    |                                                             |
|                    v                                                             |
|  6. SISTEMA EVALUA SI CORRESPONDE RETENER                                        |
|     +-- Por cada concepto de ganancia:                                          |
|         +-- Obtiene monto minimo no sujeto a retencion del concepto             |
|         +-- Compara acumulado del periodo vs monto minimo                       |
|         +-- Si acumulado < minimo: NO retiene (solo acumula)                    |
|         +-- Si acumulado >= minimo: SI retiene (continua al paso 7)             |
|                    |                                                             |
|                    v                                                             |
|  7. SISTEMA REGISTRA RETENCIONES EN CUENTA CORRIENTE                             |
|     +-- Solo para conceptos que superaron el minimo:                            |
|         +-- Crea movimiento CONTRARIO (DEBE) por el monto retenido              |
|         +-- Esto reduce el saldo pendiente del proveedor                        |
|                    |                                                             |
|                    v                                                             |
|  8. SISTEMA GENERA CERTIFICADOS DE RETENCION                                     |
|     +-- Solo para retenciones efectivas:                                        |
|         +-- Obtiene numero correlativo de tabla numeradores                     |
|         +-- Incrementa el numerador 'retencion_ganancia'                        |
|         +-- Asigna el numero de certificado a la retencion                      |
|                    |                                                             |
|                    v                                                             |
|  9. SISTEMA REGISTRA DETALLE DE GANANCIA                                        |
|     +-- Solo para retenciones efectivas:                                        |
|         +-- Registra el detalle con numero de certificado                       |
|         +-- Vincula con concepto, orden de pago y movimiento de retencion       |
|                    |                                                             |
|                    v                                                             |
|  10. SISTEMA ACTUALIZA MONTO RETENIDO EN ACUMULADOR                             |
|      +-- Solo para retenciones efectivas:                                       |
|          +-- Incrementa el monto retenido registrado en el periodo              |
|                    |                                                             |
|                    v                                                             |
|  11. SISTEMA REGISTRA EN TESORERIA                                               |
|      +-- Solo para retenciones efectivas:                                       |
|          +-- Registra como INGRESO el dinero retenido                           |
|          +-- El dinero retenido queda en poder de la empresa                    |
|                    |                                                             |
|                    v                                                             |
|  12. PROCESO COMPLETADO                                                          |
|      +-- Sistema confirma registro exitoso                                      |
|      +-- Acumuladores actualizados por periodo                                  |
|      +-- Retenciones efectivas con certificados generados                       |
|      +-- Todos los movimientos vinculados a la orden de pago                    |
|                                                                                  |
+---------------------------------------------------------------------------------+

Condiciones previas para el proceso

Para que se pueda procesar una orden de pago con evaluacion de retenciones de ganancias, deben cumplirse:

  1. Orden de pago valida: Debe existir un monto de pago mayor a cero
  2. Proveedor identificado: La orden de pago debe estar asociada a un proveedor
  3. Conceptos de ganancia configurados: Deben existir conceptos de ganancia activos en el sistema con sus montos minimos establecidos
  4. Periodo identificable: Se debe poder determinar el mes y año del pago para actualizar el acumulador
  5. Monto base por concepto: Se debe indicar el monto base sujeto a cada concepto de ganancia

Impacto contable y financiero

Escenario 1: Orden de pago con retenciones efectivas

Situacion: Usuario registra orden de pago para cancelar factura de $10,000

Condiciones:

  • Factura del proveedor: $10,000 (HABER en cuenta corriente)
  • Usuario ingresa monto de orden: $10,000 (quiere aplicar este monto contra la factura)
  • Concepto Ganancias 4ta Categoria: monto minimo $500, alicuota 10%
  • Concepto Ganancias Servicios: monto minimo $100, alicuota 5%
  • Monto base 4ta Cat: $8,000 (supera minimo → SI retiene)
  • Monto base Servicios: $4,000 (supera minimo → SI retiene)
  • Retencion 4ta Cat: $800 (10% de $8,000)
  • Retencion Servicios: $200 (5% de $4,000)
  • Total retenciones: $1,000
  • Monto neto a pagar: $10,000 - $1,000 = $9,000

Movimientos generados:

MovimientoTipoEfecto
Orden de PagoCuenta CorrienteRegistra $9,000 neto
Acumulador 4ta CatAcumuladoMonto acumulado $8,000, Monto retenido $800
Acumulador ServiciosAcumuladoMonto acumulado $4,000, Monto retenido $200
Retencion Gan. 4ta Cat.Cuenta CorrienteRegistra $800 retenido
Retencion Gan. ServiciosCuenta CorrienteRegistra $200 retenido
Detalle Ret. 4ta Cat.Detalle de GananciaCertificado #001
Detalle Ret. ServiciosDetalle de GananciaCertificado #002
Ingreso TesoreriaTesoreriaRegistra $1,000 entrada

Resultado en cuenta corriente:

  • Factura del proveedor: HABER $10,000 (comprobante original)
  • Orden de pago: DEBE $9,000 (monto neto = montoOrden - retenciones)
  • Retenciones: DEBE $1,000 ($800 + $200)
  • Total DEBE: $10,000 → Cancela totalmente HABER $10,000 ✅
  • Saldo final: $0 (factura cancelada completamente)

Resultado en tesorería:

  • Egreso por pago al proveedor: $9,000 (lo que sale de caja)
  • Ingreso por retenciones: $1,000 (NO sale de caja, queda para pagar al fisco)
  • Flujo neto de efectivo: -$8,000 (sale menos dinero que el monto de la factura)

Escenario 2: Orden de pago que acumula pero no retiene

Situacion: Primera orden de pago del mes de $500 que no alcanza el monto minimo

Condiciones:

  • Concepto Ganancias 4ta Categoria: monto minimo $1,000, alicuota 10%
  • Monto base: $500 (NO supera minimo → NO retiene, solo acumula)
  • Acumulado del periodo: $500

Movimientos generados:

MovimientoTipoEfecto
Orden de PagoCuenta CorrienteRegistra $500
Acumulador 4ta CatAcumuladoMonto acumulado $500, Sin retención

Resultado:

  • La orden de pago va al DEBE (cancela parte de la deuda con el proveedor)
  • NO se genera movimiento de retencion en cuenta corriente
  • NO se genera certificado ni detalle de ganancia
  • NO se registra ingreso en tesoreria
  • El proveedor recibe el total: $500
  • El sistema registra el acumulado para futuras evaluaciones del periodo

Backend

Entidades de negocio

Entidades del negocio involucradas en el proceso:

Orden de Pago

Representa el registro de un pago realizado a un proveedor.

DatoDescripcionRestricciones
IdentificadorIdentificador unico de la ordenGenerado automaticamente
FechaFecha del pagoRequerida
ProveedorProveedor al que se realiza el pagoRequerido, debe existir
MontoMonto total de la orden de pagoRequerido, mayor a cero
Comprobantes asociadosComprobantes que se cancelan con este pagoAl menos uno requerido
EstadoEstado de la ordenActiva/Anulada

Acumulador de Ganancias por Periodo

Representa el acumulado mensual de pagos y retenciones por proveedor y concepto de ganancia.

DatoDescripcionRestricciones
ProveedorCodigo del proveedorRequerido
MesMes del periodoRequerido, entre 1 y 12
AñoAño del periodoRequerido
Concepto de gananciaConcepto de gananciaRequerido, debe existir
Monto acumuladoMonto total de pagos del periodo (monacu)Mayor o igual a cero
Monto retenidoMonto total retenido del periodo (monret)Puede ser NULL si no hubo retenciones

Nota: La combinacion de proveedor + mes + año + concepto es unica. Se actualiza con cada orden de pago del periodo.

Detalle de Retencion de Ganancia

Representa una retencion de ganancia efectivamente aplicada en una orden de pago (solo se registra si hubo retencion).

DatoDescripcionRestricciones
IdentificadorIdentificador unico del detalleGenerado automaticamente
Concepto de gananciaConcepto de ganancia aplicadoRequerido, debe existir
Numero de certificadoNumero correlativo del certificadoGenerado desde numeradores
Orden de pagoOrden de pago asociadaRequerida
Movimiento de retencionMovimiento de cuenta corriente de la retencionRequerido

Nota: Solo se registra cuando el acumulado del periodo supero el monto minimo del concepto.

Concepto de Ganancia

Configuracion de los conceptos de retenciones de ganancias disponibles.

DatoDescripcionRestricciones
Código de RégimenCódigo del concepto de gananciaRequerido, único
NombreDescripción del concepto de gananciaRequerido
Porcentaje para InscriptosAlícuota para proveedores inscriptos en gananciasEntre 0 y 100
Porcentaje para No InscriptosAlícuota para no inscriptos en gananciasEntre 0 y 100
Monto MínimoMonto mínimo no sujeto a retención de gananciaMayor o igual a cero
Cuenta ContableCuenta para imputación contable de la retenciónDebe existir

Movimiento de Cuenta Corriente

Registro de debitos y creditos en la cuenta del proveedor.

DatoDescripcionRestricciones
IdentificadorIdentificador unico del movimientoGenerado automaticamente
ProveedorProveedor afectadoRequerido
FechaFecha del movimientoRequerida
TipoDebe o HaberRequerido
MontoImporte del movimientoMayor a cero
OrigenOrden de pago o retencion que origina el movimientoRequerido

Detalle de Ganancia

Registro del detalle de cada retención de ganancias efectivamente aplicada.

DatoDescripciónRestricciones
Código de ConceptoConcepto de retención aplicadoRequerido
Número de CertificadoNúmero correlativo del certificado emitidoRequerido
Orden de PagoOrden de pago asociadaRequerida
Movimiento de RetenciónMovimiento de cuenta corriente asociadoRequerido

Nota importante: Este registro solo existe cuando se efectuó una retención (cuando el acumulado del período superó el monto mínimo del concepto). Si no se retuvo nada, no hay registro.

Movimiento de Tesoreria

Registro de ingresos y egresos de caja.

DatoDescripcionRestricciones
IdentificadorIdentificador unicoGenerado automaticamente
FechaFecha del movimientoRequerida
TipoIngreso o EgresoRequerido
MontoImporte del movimientoMayor a cero
ConceptoDescripcion del movimientoRequerido
OrigenRetencion u orden de pago que origina el movimientoRequerido

Relaciones de negocio

  • Una orden de pago SIEMPRE actualiza uno o mas acumuladores de ganancias (acugan) por periodo
  • Cada concepto de ganancia tiene un monto minimo que determina si se debe retener
  • Una orden de pago puede generar cero, una o multiples retenciones efectivas segun los montos acumulados
  • Una orden de pago genera un movimiento de cuenta corriente tipo DEBE
  • Cada retencion efectiva genera un movimiento de cuenta corriente tipo DEBE
  • Ambos van del mismo lado porque ambos reducen la deuda con el proveedor
  • Cada retencion efectiva genera un detalle de ganancia (detgan) con numero de certificado
  • Cada retencion efectiva genera un movimiento de tesoreria tipo INGRESO
  • El acumulador (acugan) se actualiza SIEMPRE con cada pago, tenga o no retencion
  • El detalle (detgan) solo se registra cuando hay retencion efectiva
  • El numero de certificado se obtiene de la tabla numeradores con key 'retencion_ganancia'
  • Todos los movimientos quedan vinculados a la orden de pago original

Validaciones de negocio

Validaciones de la orden de pago

ValidacionReglaMensaje de error
Monto positivoEl monto de la orden debe ser mayor a cero"El monto de la orden de pago debe ser mayor a cero"
Proveedor validoEl proveedor debe existir y estar activo"El proveedor seleccionado no existe o no esta activo"
Comprobantes validosLos comprobantes deben existir y tener saldo pendiente"El comprobante no tiene saldo pendiente"

Validaciones de conceptos de ganancia y montos

ValidacionReglaMensaje de error
Concepto de ganancia activoEl concepto de ganancia debe estar activo"El concepto de ganancia no esta disponible"
Monto base positivoEl monto base por concepto debe ser mayor a cero"El monto base debe ser mayor a cero"
Concepto no duplicadoNo puede haber dos conceptos de ganancia duplicados en una orden"Ya existe el concepto de ganancia seleccionado"
Monto minimo configuradoEl concepto de ganancia debe tener monto minimo configurado"El concepto no tiene monto minimo configurado"
Periodo validoDebe poder determinarse mes y año del pago"No se puede determinar el periodo del pago"

Reglas de Negocio

RN-001: Actualizacion obligatoria del acumulador

Descripcion: Toda orden de pago DEBE actualizar el acumulador mensual (acugan) por cada concepto de ganancia aplicable, independientemente de si se retiene o no.

Condicion: Se registra una orden de pago con conceptos de ganancia.

Accion:

  • Obtener mes y año de la fecha de la orden de pago
  • Por cada concepto de ganancia:
    • Buscar registro en acugan (proveedor + mes + año + concepto)
    • Si existe: actualizar monacu += monto_base_del_pago
    • Si no existe: crear registro con monacu = monto_base_del_pago, monret = NULL

Ejemplo:

EscenarioAccion en acuganmonret
Primera orden del mes $500Crea registro con monacu=$500NULL
Segunda orden del mes $300Actualiza monacu=$800 (500+300)NULL
Tercera orden que retiene $100Actualiza monacu=$900, monret=$100$100

Fundamento: El acumulador permite calcular retenciones futuras basadas en el historial del periodo.


RN-002: Evaluacion de monto minimo para retener

Descripcion: Solo se efectua una retencion cuando el acumulado mensual del proveedor para el concepto de ganancia supera o iguala el monto minimo configurado.

Condicion: Se esta procesando una orden de pago con conceptos de ganancia.

Accion:

  • Por cada concepto de ganancia:
    • Obtener monto_minimo del concepto
    • Obtener acumulado del periodo (monacu de acugan)
    • Si acumulado >= monto_minimo: SE RETIENE
      • Calcular monto a retener segun alicuota
      • Registrar movimiento de cuenta corriente
      • Generar certificado y registrar en detgan
      • Actualizar monret en acugan
      • Registrar ingreso en tesoreria
    • Si acumulado < monto_minimo: NO SE RETIENE
      • Solo se actualiza monacu en acugan
      • NO se registra en detgan
      • NO se genera certificado
      • NO se registra en tesoreria

Ejemplo:

Acumulado periodoMonto minimoAccion
$500$1,000NO retiene, solo acumula
$1,000$1,000SI retiene (alcanza el minimo)
$1,500$1,000SI retiene (supera el minimo)

Fundamento: Las normas fiscales establecen un monto minimo no sujeto a retencion. Solo cuando se supera ese umbral mensual se debe retener.

Consideración adicional sobre inscripción y método de cálculo:

Según RG AFIP 5423/2023, el método de cálculo de la retención depende de la inscripción del proveedor:

  • Si proveedor es INSCRIPTO (insgana='S'):

    • Aplicar escalas progresivas si el concepto las tiene configuradas (ver RG_5423_Codigo_119_Calculo_Retenciones.md)
    • Si no tiene escalas: aplicar porcentaje_inscripto simple
    • Las escalas permiten un cálculo progresivo según rangos de montos acumulados
  • Si proveedor es NO INSCRIPTO (insgana='N'):

    • SIEMPRE aplicar porcentaje_no_inscripto fijo (típicamente 28%)
    • NUNCA usar escalas progresivas, aunque estén configuradas en el concepto
    • La retención es un porcentaje fijo sobre el excedente del mínimo, sin considerar rangos

Ejemplo comparativo:

Concepto: Ganancias 4ta Categoría (con escalas configuradas)
Acumulado del periodo: $1,500,000
Monto mínimo: $450,000
Excedente: $1,050,000

INSCRIPTO:
  → Busca escala donde cae $1,500,000
  → Aplica fórmula de escala: fijo + (% × (acumulado - excedente))
  → Retención: $121,500 (ejemplo)

NO INSCRIPTO:
  → Ignora escalas
  → Aplica 28% fijo sobre excedente
  → Retención: $1,050,000 × 28% = $294,000

RN-003: Movimientos de cuenta corriente del mismo lado

Descripcion: La orden de pago y las retenciones de ganancia se registran ambas en el DEBE de la cuenta corriente del proveedor, ya que ambas reducen la deuda que la empresa tiene con el proveedor.

Condicion: Se registra una orden de pago con retenciones de ganancias.

Accion:

  • La orden de pago genera un movimiento DEBE por el monto pagado en efectivo
  • Cada retencion de ganancia genera un movimiento DEBE adicional
  • Ambos movimientos reducen la deuda con el proveedor
  • El efecto neto es: DEBE total = monto_orden + suma_retenciones

Ejemplo:

Comprobante del proveedor: $11,000 (HABER - genera deuda)

Orden de pago: $10,000 (movimiento DEBE - cancela parte de deuda)
Retencion ganancias 4ta Cat: $800 (movimiento DEBE - cancela parte de deuda)
Retencion ganancias Servicios: $200 (movimiento DEBE - cancela parte de deuda)

Efecto en cuenta corriente del proveedor:
- HABER: $11,000 (comprobante original que generó la deuda)
- DEBE: $11,000 ($10,000 + $800 + $200)
- Saldo final: $0 (cuenta saldada correctamente)

Fundamento: El proveedor emitió una factura por $11,000 que genera un HABER (pasivo, deuda de la empresa). La empresa cancela esa deuda mediante:

  1. Pago en efectivo de $10,000: Se registra DEBE porque reduce el pasivo con el proveedor
  2. Retención de $1,000: También se registra DEBE porque también reduce el pasivo, aunque el proveedor no reciba ese dinero en efectivo (la empresa lo retendrá para pagar al fisco)

Diferencia con Tesorería: Es fundamental no confundir los movimientos de Cuenta Corriente (pasivo) con los de Tesorería (activo):

  • En Cuenta Corriente: Orden Y retenciones van al DEBE (ambas reducen la deuda)
  • En Tesorería: Orden es EGRESO (sale dinero), retención es INGRESO (no sale dinero)

Son dos módulos diferentes que registran el mismo hecho económico desde dos perspectivas distintas.


RN-004: Registro del detalle de ganancia solo con retencion efectiva

Descripcion: Solo se registra el detalle de ganancia (detgan) y se genera un certificado cuando se efectuo una retencion (cuando el acumulado supero el monto minimo).

Condicion: Se determino que corresponde retener segun RN-002 (acumulado >= monto minimo).

Accion:

  1. Crear registro de detalle de ganancia
  2. Vincular con el concepto de ganancia utilizado
  3. Vincular con la orden de pago
  4. Registrar el monto base y el monto retenido
  5. Obtener y asignar numero de certificado correlativo desde la tabla numeradores
  6. Vincular con el movimiento de cuenta corriente de la retencion

Generacion del numero de certificado:

  • El numero de certificado se obtiene de la tabla numeradores
  • Para retenciones de ganancias se usa la key 'retencion_ganancia'
  • Al registrar la retencion, se incrementa el valor del numerador
  • El numero obtenido es unico y secuencial

Condicion para registrar:

  • Solo se ejecuta si corresponde retener (acumulado >= monto minimo)
  • Si no se retiene, NO se registra en detgan ni se genera certificado

Informacion registrada:

  • Concepto de ganancia aplicado (codgan)
  • Monto base sobre el que se retuvo
  • Monto efectivamente retenido
  • Orden de pago asociada (id_orden)
  • Numero de certificado de retencion (numret) - obtenido de numeradores
  • Movimiento de cuenta corriente asociado (id_mov_ret)
  • Fecha de la retencion

RN-005: Registro en tesoreria como ingreso

Descripcion: Las retenciones de ganancia efectivas se registran como INGRESO en tesoreria porque el dinero retenido queda en poder de la empresa hasta que se pague al fisco.

Condicion: Se registro una retencion efectiva de tipo ganancia en una orden de pago (acumulado supero monto minimo).

Accion:

  • Crear movimiento de tesoreria tipo INGRESO
  • El monto es igual al monto de la retencion
  • Vincular con la orden de pago y la retencion

Fundamento: Cuando la empresa paga $8,500 al proveedor pero la orden de pago es de $10,000, los $1,500 de diferencia quedan en caja. Ese dinero ingresa efectivamente a tesoreria (aunque con destino al fisco). Cuando se pague la retencion al fisco, se registrara como egreso.

Ejemplo:

Orden de pago: $10,000
Retencion ganancias: $1,000

Movimientos en tesoreria:
- EGRESO: $8,500 (pago efectivo al proveedor)
- INGRESO: $1,000 (retencion que queda en caja)

Flujo de caja neto: -$8,500 (sale menos dinero de caja que el valor de la orden)

RN-006: Actualizacion del monto retenido en acumulador

Descripcion: Cuando se efectua una retencion, se debe actualizar el campo monret del acumulador (acugan) con el monto total retenido en el periodo.

Condicion: Se registro una retencion efectiva.

Accion:

  • Actualizar el registro de acugan correspondiente
  • Sumar el monto retenido al campo monret
  • Si es la primera retencion del periodo: monret = monto_retenido
  • Si ya hubo retenciones: monret += monto_retenido

Ejemplo:

Primera orden sin retencion: acugan.monacu=$500, monret=NULL
Segunda orden con retencion $50: acugan.monacu=$700, monret=$50
Tercera orden con retencion $30: acugan.monacu=$1000, monret=$80

RN-007: Validacion de montos base por concepto

Descripcion: El monto base asignado a cada concepto de ganancia debe ser coherente con el monto total de la orden.

Condicion: Usuario intenta agregar una retencion de ganancia a una orden de pago.

Accion:

  • Calcular suma de retenciones de ganancias existentes + retencion de ganancia a agregar
  • Si suma > monto de orden: rechazar con mensaje de error
  • Si suma <= monto de orden: permitir agregar la retencion de ganancia

Ejemplo:

Monto OrdenRetenciones ExistentesNueva RetencionPermitido
$10,000$0$1,000Si
$10,000$9,000$1,000Si
$10,000$9,500$1,000No
$10,000$10,000$500No

RN-008: Orden de registro de movimientos

Descripcion: Los movimientos se deben registrar en un orden especifico para mantener la coherencia y trazabilidad.

Condicion: Se confirma el registro de una orden de pago con conceptos de ganancia.

Accion: Ejecutar los registros en el siguiente orden:

  1. Primero: Registrar la orden de pago y su movimiento de cuenta corriente (DEBE)
  2. Segundo: Actualizar o crear acumuladores en acugan (monacu)
  3. Tercero: Evaluar si corresponde retener segun monto minimo
  4. Cuarto: Si corresponde retener:
    • Registrar movimiento de cuenta corriente de retención (DEBE)
    • Generar numero de certificado desde numeradores
    • Registrar detalle en detgan con certificado
    • Actualizar monret en acugan
    • Registrar ingreso en tesoreria

Fundamento: Este orden garantiza que:

  • La orden de pago existe antes de procesar retenciones
  • El acumulador se actualiza siempre, tenga o no retencion
  • Solo se generan movimientos cuando corresponde retener
  • La transaccionalidad se mantiene en todo el proceso

RN-009: Concepto de ganancia unico por orden

Descripcion: No se puede aplicar el mismo concepto de ganancia mas de una vez en una misma orden de pago.

Condicion: Usuario intenta agregar una retencion de ganancia a una orden de pago.

Accion:

  • Verificar si ya existe una retencion del mismo concepto de ganancia en la orden
  • Si existe: rechazar con mensaje "Ya existe una retencion del concepto de ganancia seleccionado"
  • Si no existe: permitir agregar la retencion de ganancia

Fundamento: Evita duplicacion de retenciones de ganancias y simplifica la gestion. Si se necesita retener mas del mismo concepto de ganancia, se debe modificar el monto de la retencion existente.


RN-010: Transaccionalidad del proceso

Descripcion: Todo el proceso de registro (orden + acumuladores + retenciones + detalles + tesoreria) debe ejecutarse como una unica transaccion.

Condicion: Se confirma el registro de una orden de pago con retenciones.

Accion:

  • Si todos los registros son exitosos: confirmar la transaccion
  • Si alguno falla: revertir todos los registros previos

Fundamento: Garantiza la consistencia de datos. No puede quedar una orden de pago sin sus retenciones asociadas, ni retenciones sin su movimiento de tesoreria. Todo se registra o nada se registra.


RN-012: Registro correcto de orden de pago con retenciones

Descripcion: La orden de pago debe registrarse en cuenta corriente por el monto NETO (total ingresado menos retenciones), y las retenciones se registran por separado. Esto garantiza que el total de débitos coincida con el monto de la factura.

Condicion: Se registra una orden de pago con retenciones de ganancias.

Accion:

Paso 1 - Usuario ingresa datos:

  • Usuario ingresa monto total de la orden: $10,000 (monto que quiere aplicar contra la factura)
  • Sistema calcula retenciones aplicables: $1,000
  • Monto neto a pagar al proveedor: $9,000

Paso 2 - Sistema calcula:

  • Monto de la orden: $10,000 (total ingresado por usuario)
  • Total de retenciones: $1,000 (calculado por el sistema)
  • Monto neto a registrar: $9,000 (orden menos retenciones)

Paso 3 - Registro en cuenta corriente:

  • Registrar orden de pago: DEBE $9,000 (monto neto = total - retenciones)
  • Registrar retenciones: DEBE $1,000
  • Total DEBE: $10,000 (coincide con factura)

Paso 4 - Actualización de comprobantes:

  • Actualizar saldo del comprobante: restar $10,000 (monto completo de la orden)

✅ Implementación corregida (v2.4):

El sistema ahora:

  1. Recibe el total de retenciones calculado desde el frontend
  2. Calcula el monto neto restando las retenciones del total
  3. Registra la orden de pago por el monto neto (no por el total)
  4. Registra las retenciones por separado como movimientos DEBE adicionales

Resultado: Los débitos totales coinciden exactamente con el monto de la factura.

Ejemplo de funcionamiento correcto:

Comprobante: Factura A #001 por $10,000 (HABER)
Usuario ingresa orden de pago: $10,000
Sistema calcula retenciones: $1,000
Monto neto = $10,000 - $1,000 = $9,000
Proveedor recibe efectivo: $9,000

✅ Registro CORRECTO:
  - DEBE por orden de pago: $9,000 (usa montoNeto)
  - DEBE por retenciones: $1,000
  - Total DEBE: $10,000 ← CORRECTO: Cuadra con factura

Actualización de comprobante:
  - Saldo anterior: $10,000
  - Se aplica: $10,000 (montoOrden completo)
  - Nuevo saldo: $0 (comprobante cancelado)

Balance de cuenta corriente:
  HABER: $10,000 (factura)
  DEBE:  $10,000 ($9,000 + $1,000)
  Saldo: $0 ✅

Fundamento: El usuario quiere aplicar $10,000 contra la factura. Ese $10,000 se divide en:

  • $9,000 que se pagan en efectivo al proveedor
  • $1,000 que se retienen para pagar al fisco

Ambos montos cancelan la deuda con el proveedor, por eso ambos se registran como DEBE. Si se registrara el monto completo ($10,000) más las retenciones ($1,000), el total de débitos sería $11,000, lo cual no tiene sentido contable ya que la factura es de solo $10,000.


RN-011: Generacion automatica de certificados de retencion de ganancias

Descripcion: Por cada retencion de ganancia efectiva, se debe generar automaticamente un certificado con numero correlativo unico.

Condicion: Se determino que corresponde retener (acumulado >= monto minimo) y se va a registrar en detgan.

Accion:

  1. Obtener el numerador de la tabla numeradores usando la key 'retencion_ganancia'
  2. Incrementar el valor del numerador en 1
  3. Asignar el numero obtenido como numero de certificado de la retencion de ganancia
  4. Actualizar el valor en la tabla numeradores
  5. Registrar el numero de certificado en la tabla detgan (campo numret)

Numerador utilizado:

Key en numeradoresDescripcionUso
retencion_gananciaCertificados de retenciones de gananciasGenera numeros secuenciales para certificados de retenciones de ganancias

Ejemplo:

Estado inicial de numeradores:
  - retencion_ganancia: value = 1234

Se registra retencion de ganancia efectiva:
  1. Leer numeradores WHERE key = 'retencion_ganancia' → value = 1234
  2. Incrementar: nuevo_valor = 1235
  3. Asignar numero de certificado = 1235
  4. UPDATE numeradores SET value = 1235 WHERE key = 'retencion_ganancia'
  5. INSERT INTO detgan (..., numret = 1235, ...)

Resultado:
  - Certificado de retencion de ganancia #1235 generado
  - Numerador actualizado a 1235
  - Detalle registrado con numero de certificado

Nota importante: Solo se genera certificado cuando hay retencion efectiva. Si no se retiene, NO se consume numerador.

Atomicidad:

  • La lectura y actualizacion del numerador debe ser atomica para evitar duplicados
  • Si falla la generacion del certificado, toda la transaccion de la orden de pago se revierte

Casos de Uso

CU-001: Registrar orden de pago que acumula pero no retiene (monto menor al minimo)

Actor: Usuario de Tesoreria / Contador

Objetivo: Registrar una orden de pago con conceptos de ganancia que no alcanzan el monto minimo (solo acumulan)

Precondiciones:

  • Usuario autenticado con permiso para registrar ordenes de pago
  • Proveedor existente con comprobantes pendientes
  • Conceptos de ganancia configurados con monto minimo
  • Es el primer pago del mes o el acumulado no alcanza el minimo

Flujo principal:

  1. El usuario accede al modulo de Ordenes de Pago
  2. El usuario selecciona "Nueva Orden de Pago"
  3. El usuario selecciona el proveedor
  4. El usuario selecciona los comprobantes a cancelar
  5. El usuario indica monto de orden: $500
  6. El usuario selecciona concepto "Ganancias 4ta Cat" (monto minimo: $1,000)
  7. El usuario indica monto base: $500
  8. El sistema muestra resumen: Total $500, Retenciones $0, Neto $500
  9. El usuario confirma el registro
  10. El sistema registra la orden de pago (HABER $500)
  11. El sistema actualiza acugan: monacu = $500, monret = NULL
  12. El sistema NO genera movimiento de retencion (acumulado < minimo)
  13. El sistema NO genera certificado ni registra en detgan
  14. El sistema confirma: "Orden registrada. Acumulado del periodo: $500 (no alcanza minimo para retener)"

Postcondiciones:

  • Orden de pago registrada
  • Acumulador (acugan) actualizado con monto del pago
  • NO se genero retencion ni certificado
  • Proveedor recibe el monto total
  • El sistema mantiene el acumulado para futuras evaluaciones

CU-002: Registrar orden de pago con retencion efectiva (acumulado supera minimo)

Actor: Usuario de Tesoreria / Contador

Objetivo: Registrar una orden de pago donde el acumulado del periodo supera el monto minimo y se efectua retencion

Precondiciones:

  • Usuario autenticado con permisos de registrar ordenes de pago
  • Proveedor existente con comprobantes pendientes
  • Conceptos de ganancia configurados con monto minimo
  • El acumulado del periodo alcanza o supera el monto minimo

Contexto del ejemplo:

  • Concepto: Ganancias 4ta Categoria (monto minimo: $1,000, alicuota: 10%)
  • Acumulado previo del mes: $600
  • Nueva orden: $500
  • Acumulado total: $1,100 (supera el minimo)

Flujo principal:

  1. El usuario accede al modulo de Ordenes de Pago
  2. El usuario selecciona "Nueva Orden de Pago"
  3. El usuario selecciona el proveedor
  4. El usuario selecciona los comprobantes a cancelar
  5. El usuario indica monto de orden: $500
  6. El usuario selecciona concepto "Ganancias 4ta Categoria"
  7. El usuario indica monto base: $500
  8. El sistema consulta acumulado previo: $600
  9. El sistema calcula acumulado total: $1,100 (supera minimo de $1,000)
  10. El sistema calcula retencion: $110 (10% de $1,100)
  11. El sistema muestra resumen: Total $500, Retenciones $110, Neto $390
  12. El usuario confirma el registro
  13. El sistema registra la orden de pago (HABER $500)
  14. El sistema actualiza acugan: monacu = $1,100, monret = $110
  15. El sistema registra movimiento de retencion (DEBE $110)
  16. El sistema obtiene numero de certificado desde numeradores (key: 'retencion_ganancia')
  17. El sistema registra en detgan con numero de certificado
  18. El sistema registra ingreso en tesoreria ($110)
  19. El sistema confirma: "Orden registrada. Certificado #1235 generado"

Postcondiciones:

  • Orden de pago registrada
  • Acumulador (acugan) actualizado: monacu=$1,100, monret=$110
  • Movimiento de cuenta corriente HABER por $500
  • Movimiento de cuenta corriente DEBE por $110
  • Detalle en detgan con certificado generado
  • Movimiento de tesoreria INGRESO por $110
  • Proveedor recibe $390 efectivo

Flujos alternativos:

PasoCondicionAccion
12aError en registroRevertir toda la transaccion
16aError generando certificadoRevertir toda la transaccion

CU-003: Registrar orden de pago con multiples conceptos de ganancia

Actor: Usuario de Tesoreria / Contador

Objetivo: Registrar una orden de pago con multiples conceptos de ganancia, donde algunos retienen y otros solo acumulan

Precondiciones:

  • Usuario autenticado con permisos correspondientes
  • Proveedor existente con comprobantes pendientes
  • Multiples conceptos de ganancia configurados (ej: 4ta categoria, servicios)

Contexto del ejemplo:

  • Concepto 1: Ganancias 4ta Cat (minimo: $1,000, alicuota: 10%, acumulado previo: $1,500)
  • Concepto 2: Ganancias Servicios (minimo: $2,000, alicuota: 5%, acumulado previo: $500)
  • Nueva orden: $10,000 ($8,000 para 4ta Cat, $4,000 para Servicios)

Flujo principal:

  1. El usuario selecciona proveedor y comprobantes
  2. El usuario indica monto de orden: $10,000
  3. El usuario agrega concepto "Ganancias 4ta Categoria" con monto base: $8,000
  4. El sistema calcula: acumulado = $9,500, supera minimo → retencion = $950
  5. El usuario agrega concepto "Ganancias Servicios" con monto base: $4,000
  6. El sistema calcula: acumulado = $4,500, supera minimo → retencion = $225
  7. El sistema muestra resumen: Total $10,000, Retenciones $1,175, Neto $8,825
  8. El usuario confirma el registro
  9. El sistema registra orden de pago (HABER $10,000)
  10. El sistema actualiza ambos acumuladores en acugan
  11. El sistema registra ambas retenciones en cuenta corriente (DEBE $950 + DEBE $225)
  12. El sistema genera dos certificados correlativos
  13. El sistema registra ambos detalles en detgan con certificados
  14. El sistema registra ingreso en tesoreria por $1,175
  15. El sistema confirma: "Orden registrada. Certificados #1235 y #1236 generados"

Postcondiciones:

  • Acumuladores actualizados: 4ta Cat monacu=$9,500 monret=$950, Servicios monacu=$4,500 monret=$225
  • Dos movimientos DEBE en cuenta corriente
  • Dos certificados generados
  • Dos registros en detgan
  • Ingreso en tesoreria por total de retenciones

CU-004: Consultar retenciones y acumuladores de una orden de pago

Actor: Usuario de Tesoreria / Contador / Auditor

Objetivo: Visualizar las retenciones aplicadas, acumuladores del periodo y certificados de una orden de pago

Precondiciones:

  • Usuario autenticado con permiso para consultar ordenes de pago
  • Orden de pago existente con conceptos de ganancia procesados

Flujo principal:

  1. El usuario accede al listado de Ordenes de Pago
  2. El usuario localiza y selecciona "Ver Detalle" de la orden
  3. El sistema presenta informacion de la orden de pago
  4. El sistema muestra seccion de conceptos de ganancia procesados:
    • Por cada concepto: nombre, monto base, acumulado del periodo
    • Indicador si se retuvo o solo se acumulo
  5. El sistema muestra retenciones efectivas (si las hubo):
    • Concepto, monto retenido, numero de certificado
    • Opcion para imprimir cada certificado
  6. El sistema muestra movimientos generados:
    • Movimiento cuenta corriente de la orden (HABER)
    • Movimientos de retenciones (DEBE) si los hubo
    • Registro en acugan (acumulador del periodo)
    • Registros en detgan (solo si hubo retencion)
    • Movimiento de tesoreria (INGRESO) si hubo retencion
  7. El sistema muestra resumen: Total pagado, Total retenido, Neto al proveedor

Postcondiciones:

  • Usuario visualiza informacion completa de la orden
  • Usuario puede ver acumulados del periodo por concepto
  • Usuario puede ver certificados generados (si los hubo)
  • No se modifica ningun dato

Consideraciones

Seguridad

Datos sensibles que requieren proteccion:

  • Montos de pagos y retenciones
  • Informacion fiscal de proveedores
  • Numeros de certificados de retencion

Control de acceso:

  • Solo usuarios con permiso de "registrar ordenes de pago" pueden crear ordenes
  • Solo usuarios con permiso de "aplicar retenciones de ganancias" pueden agregar retenciones de ganancias
  • La consulta de ordenes y retenciones de ganancias requiere permiso de "consultar ordenes de pago"
  • Separacion de funciones: quien registra la orden puede ser diferente a quien la aprueba

Integridad de datos:

  • Las ordenes de pago y retenciones registradas no deben poder modificarse (solo anularse)
  • Los movimientos de cuenta corriente y tesoreria son inmutables

Auditoria

Operaciones que se deben registrar:

  • Creacion de orden de pago (fecha, usuario, datos de la orden)
  • Registro de cada retencion de ganancia (concepto, monto, numero de certificado, usuario)
  • Generacion de certificados de retencion
  • Generacion de movimientos de cuenta corriente
  • Generacion de detalle de ganancia
  • Generacion de movimiento de tesoreria
  • Anulacion de orden de pago (si se permite)

Informacion a capturar:

  • Usuario que realiza la operacion
  • Fecha y hora de la operacion
  • Datos antes y despues del cambio
  • Direccion IP y terminal del usuario

Rendimiento

Volumenes esperados:

  • Estimado de ordenes de pago por mes: variable segun empresa
  • Promedio de retenciones por orden: 1-3
  • Consultas de ordenes por dia: alta frecuencia

Consideraciones operativas:

  • El proceso de registro debe ser rapido para no afectar la productividad
  • La consulta de ordenes debe permitir filtros eficientes
  • El calculo de totales debe ser inmediato al agregar/quitar retenciones

Estructuras de Datos

Tablas involucradas

Las estructuras de las tablas necesarias para esta funcionalidad estan definidas en el directorio migrations/ del proyecto:

Tabla: numeradores

Archivo de migracion: migrations/migrations/tenancy/20251211100001_new_table_numeradores.php

Almacena numeros secuenciales para diferentes conceptos, incluyendo los certificados de retenciones.

CampoTipoDescripcion
keystring(30)Identificador unico del numerador (ej: 'retencion_ganancia')
valueintegerValor actual del numerador

Indices: Indice unico sobre key

Nivel: Empresa y Sucursal (cada sucursal tiene su propia numeracion de certificados)

Seed: El seed Numeradores.php crea automaticamente la key 'retencion_ganancia' con valor inicial 0

Tabla: acugan

Archivo de migracion: migrations/migrations/tenancy/20251211100003_new_table_acugan.php

Almacena acumuladores mensuales de pagos y retenciones por proveedor y concepto de ganancia.

CampoTipoDescripcion
codprointegerCodigo del proveedor
messmallintegerMes del periodo (1-12)
anosmallintegerAño del periodo
codgansmallintegerCodigo del concepto de ganancia
monacudecimal(16,5)Monto acumulado de pagos mensuales (netos)
monretdecimal(16,5)Monto que se retuvo por ganancias (puede ser NULL)

Indices: Indice unico sobre (codpro, mes, ano, codgan)

Nivel: Empresa y Sucursal

Nota: Esta tabla se actualiza SIEMPRE con cada orden de pago, tenga o no retencion

Tabla: detgan

Archivo de migracion: migrations/migrations/tenancy/20251211100005_new_table_detgan.php

Almacena el detalle de retenciones de ganancias efectivas por orden de pago (solo cuando se retiene).

CampoTipoDescripcion
idintegerIdentificador unico (PK)
codgansmallintegerCodigo del concepto de ganancia
numretintegerNumero del certificado de retencion (obtenido de numeradores con key 'retencion_ganancia')
id_ordenuuidIdentificador de la orden de pago
id_mov_retuuidIdentificador del movimiento de cuenta corriente de la retencion

Nivel: Empresa y Sucursal

Relaciones:

  • codgan → Concepto de ganancia (tabla congan)
  • id_orden → Orden de pago
  • id_mov_ret → Movimiento de cuenta corriente

Nota importante: Esta tabla SOLO tiene registros cuando se efectuo una retencion (acumulado >= monto minimo). Si no se retiene, NO hay registro en detgan.

Otras tablas relacionadas

  • Ordenes de pago: Definida en el modulo de tesoreria
  • Movimientos de cuenta corriente: Definida en el modulo de cuenta corriente
  • Conceptos de ganancia: Definida en migrations/ del modulo de compras
  • Movimientos de tesoreria: Definida en el modulo de tesoreria

Nota: Las migraciones garantizan que las estructuras esten creadas en los esquemas correspondientes segun la configuracion de niveles (empresa/sucursal/caja) de cada tabla.


Dependencias

Funcionalidades relacionadas

Modulos del sistema

  • Modulo de Compras: Comprobantes de compra que se pagan con las ordenes
  • Modulo de Cuenta Corriente: Movimientos de debe/haber del proveedor
  • Modulo de Tesoreria: Registro de ingresos por retenciones y egresos por pagos
  • Modulo de Contabilidad: Imputaciones contables de las retenciones
  • Modulo de Proveedores: Informacion del proveedor y condicion fiscal

Procesos externos

  • Informes fiscales: Las retenciones registradas deben poder exportarse para declaraciones juradas (AFIP)
  • Certificados de retencion: Generacion de certificados para entregar a proveedores
  • Conciliacion bancaria: Los pagos netos deben coincidir con los egresos bancarios

Criterios de Aceptacion

La funcionalidad se considera completa cuando:

  • [ ] AC-001: Toda orden de pago con conceptos de ganancia actualiza o crea registros en la tabla acugan (acumulador mensual)
  • [ ] AC-002: El acumulador (acugan) se actualiza SIEMPRE, tenga o no retencion efectiva
  • [ ] AC-003: El sistema evalua el monto minimo por concepto comparando el acumulado del periodo vs el monto minimo configurado
  • [ ] AC-004: Si el acumulado NO supera el monto minimo: solo acumula en acugan, NO genera retencion, certificado ni registra en detgan
  • [ ] AC-005: Si el acumulado SI supera el monto minimo: genera retencion, certificado y registra en detgan
  • [ ] AC-006: El sistema no permite agregar el mismo concepto de ganancia mas de una vez en una orden
  • [ ] AC-007: Cada retencion efectiva genera un movimiento de cuenta corriente contrario (DEBE) al movimiento de la orden (HABER)
  • [ ] AC-008: Solo las retenciones efectivas se registran en detgan con toda la informacion requerida
  • [ ] AC-009: Por cada retencion efectiva se genera automaticamente un certificado con numero correlativo desde numeradores (key: 'retencion_ganancia')
  • [ ] AC-010: El numero de certificado es secuencial y NO se consume si no hay retencion efectiva
  • [ ] AC-011: Las retenciones efectivas se registran como INGRESO en tesoreria
  • [ ] AC-012: El campo monret de acugan se actualiza solo cuando hay retencion efectiva
  • [ ] AC-013: El orden de registro es: orden de pago -> acugan (monacu) -> evaluacion minimo -> si retiene: ctacte + certificado + detgan + acugan (monret) + tesoreria
  • [ ] AC-014: Si falla cualquier paso del registro, se revierten todos los cambios (transaccionalidad)
  • [ ] AC-015: Se puede consultar acumuladores del periodo y retenciones aplicadas en el detalle de una orden
  • [ ] AC-016: Los movimientos de cuenta corriente reflejan correctamente el efecto neto del pago y las retenciones
  • [ ] AC-017: Solo usuarios con permisos correspondientes pueden registrar ordenes con conceptos de ganancia
  • [ ] AC-018: Todas las operaciones quedan registradas en el log de auditoria

Notas adicionales

Consideraciones para la implementacion

  • El proceso de registro debe ser atomico y transaccional
  • La actualizacion del acumulador (acugan) es OBLIGATORIA en cada orden de pago con conceptos de ganancia
  • La evaluacion del monto minimo determina si se genera retencion efectiva o solo se acumula
  • La generacion de certificados debe ser atomica y garantizar numeros unicos sin duplicados
  • El orden de pago sin conceptos de ganancia ya esta implementado, este proceso documenta la extension con retenciones

Alcance de retenciones

Retenciones de Ganancias: Este proceso documenta exclusivamente las retenciones de ganancias. Cada retencion de ganancia EFECTIVA genera:

  • Actualizacion de acumulador (acugan): monacu y monret
  • Movimiento de cuenta corriente (DEBE)
  • Detalle de ganancia (detgan) con numero de certificado
  • Movimiento de tesoreria (INGRESO)

Caso especial - Pagos que solo acumulan: Cuando el acumulado NO supera el monto minimo, solo se genera:

  • Actualizacion de acumulador (acugan): monacu solamente, monret queda NULL

Otras retenciones (IIBB, SUSS, etc.): No estan contempladas en este proceso. Si se requiere registrar otro tipo de retenciones, se debe diseñar un proceso separado con sus propias reglas de negocio y tablas.

Generacion de certificados de retencion de ganancias

  • Cada retencion efectiva genera automaticamente un certificado con numero correlativo
  • Los numeros se obtienen de la tabla numeradores (migracion: 20251211100001_new_table_numeradores.php)
  • Se utiliza la key 'retencion_ganancia' en la tabla numeradores (seed: Numeradores.php)
  • La numeracion es independiente por sucursal (cada sucursal tiene sus propios numeradores)
  • Los numeros solo se consumen cuando hay retencion efectiva (NO se consumen en acumulaciones sin retencion)
  • El certificado fisico puede imprimirse posteriormente usando el numero asignado
  • Los certificados son documentos fiscales requeridos para informar retenciones a AFIP

Acumulador mensual (acugan)

  • El acumulador es clave para el funcionamiento del proceso de retenciones
  • Se actualiza en CADA orden de pago, tenga o no retencion
  • Permite calcular retenciones futuras basadas en el historial del periodo
  • El campo monacu acumula el total de pagos del mes por proveedor y concepto
  • El campo monret acumula el total retenido del mes (solo si hubo retenciones)
  • Es unico por combinacion: proveedor + mes + año + concepto

Preguntas pendientes de definicion

  1. Se permite anular una orden de pago con retenciones de ganancias? Que pasa con los movimientos y certificados generados?
  2. Existe un limite de retenciones de ganancias por orden de pago?
  3. Se debe poder imprimir el certificado de retencion de ganancias desde el sistema?
  4. Que formato debe tener el certificado de retencion de ganancias impreso (layout, datos obligatorios)?
  5. Los numeros de certificado pueden reutilizarse si se anula una orden de pago?

Documentación Técnica

Para técnicos y desarrolladores que implementen o mantengan este módulo:

📊 Diagrama de Entidad-Relación (ERD) - Sistema Completo

Este diagrama incluye la estructura técnica de TODO el sistema Bautista, incluyendo las tablas de retenciones de ganancias:

  • congan: Conceptos de ganancia
  • escgan: Escalas de ganancia
  • acugan: Acumulados por período
  • detgan: Detalles de retenciones aplicadas

Proporciona:

  • Nombres técnicos exactos de todas las tablas y campos
  • Tipos de datos y restricciones
  • Relaciones y claves foráneas
  • Integridad referencial entre entidades

Historial de cambios

FechaVersionAutorDescripcion
2025-12-161.0SistemaCreacion del documento de requerimientos de negocio
2025-12-161.1SistemaAgregado: generacion automatica de certificados desde tabla numeradores, referencias a estructuras en migrations/, regla de negocio RN-009
2025-12-161.2SistemaAclarado alcance: el proceso es exclusivamente para retenciones de GANANCIAS, no para otros tipos de retenciones (IIBB, SUSS, etc.)
2025-12-162.0SistemaRevision completa del documento: (1) Enfoque exclusivo en proceso CON retenciones (proceso sin retenciones ya existe), (2) Documentacion completa de tabla acugan como acumulador mensual por periodo, (3) Key de numeradores corregida a 'retencion_ganancia', (4) Aclaracion de que detgan solo se registra con retencion efectiva, (5) Agregada logica de monto minimo: acumula sin retener cuando no alcanza umbral, (6) Actualizados flujo principal, reglas de negocio (11 reglas), casos de uso (4 CU), criterios de aceptacion (18 AC) y estructuras de datos, (7) Simplificacion de tecnicismos enfocandose en business logic
2025-12-162.1SistemaAgregada RN-012: Documentacion del cambio de saldo en comprobantes cancelados. El frontend ahora envia campos separados (total sin retenciones y totalRetenciones). El saldo de comprobantes se actualiza con el total sin retenciones, garantizando coherencia entre comprobantes y cuenta corriente
2025-12-172.2SistemaCORRECCIÓN CRÍTICA: Error contable en movimientos de cuenta corriente. ANTES (incorrecto): Orden=HABER, Retenciones=DEBE. DESPUÉS (correcto): Orden=DEBE, Retenciones=DEBE. Ambos movimientos van del mismo lado porque ambos reducen la deuda con el proveedor. Secciones corregidas: RN-003 (reescrita completamente con fundamento contable), Escenario 1, Escenario 2, RN-008, RN-012 (incluida línea 652 que decía HABER), flujo principal (línea 88), relaciones de negocio (línea 320-322). Se agregó aclaración crítica sobre diferencia entre Cuenta Corriente (pasivo) y Tesorería (activo) para evitar confusión futura
2025-12-172.3SistemaCORRECCIÓN ADICIONAL EN RN-012: Identificado error crítico en implementación actual del código. El código registra montoOrden completo ($10,000) + retenciones ($1,000) = DEBE total $11,000, lo cual NO cuadra con la factura. CORRECCIÓN REQUERIDA: Registrar montoNeto ($9,000) en orden de pago + retenciones ($1,000) = DEBE total $10,000. RN-012 reescrita completamente con ejemplo ANTES/DESPUÉS y fundamento contable. La orden debe registrarse por (montoOrden - montoRetenciones), no por montoOrden completo
2025-12-172.4SistemaIMPLEMENTACIÓN CORREGIDA: Se corrigió el código según lo documentado en v2.3. Correcciones: (1) La orden de pago ahora se registra por el monto neto (total menos retenciones), no por el total completo, (2) Las retenciones ahora se registran como DEBE (antes incorrectamente como HABER). Resultado: orden de pago + retenciones = monto correcto que cuadra con factura. RN-012 actualizada y marcada como ✅ CORREGIDA. Documentación simplificada eliminando referencias técnicas a nombres de funciones y parámetros