Appearance
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:
- Registro de orden de pago: Se registra el pago principal al proveedor como movimiento de cuenta corriente
- Acumulacion de montos por periodo: Se registra o actualiza el acumulador mensual de pagos al proveedor por concepto de ganancia
- Evaluacion de retencion: Se determina si corresponde retener segun el monto minimo del concepto y el acumulado del periodo
- 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
- Registro del detalle de ganancia: Si corresponde retener, se registra el concepto, monto y certificado de cada retencion de ganancia
- 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:
- Orden de pago valida: Debe existir un monto de pago mayor a cero
- Proveedor identificado: La orden de pago debe estar asociada a un proveedor
- Conceptos de ganancia configurados: Deben existir conceptos de ganancia activos en el sistema con sus montos minimos establecidos
- Periodo identificable: Se debe poder determinar el mes y año del pago para actualizar el acumulador
- 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:
| Movimiento | Tipo | Efecto |
|---|---|---|
| Orden de Pago | Cuenta Corriente | Registra $9,000 neto |
| Acumulador 4ta Cat | Acumulado | Monto acumulado $8,000, Monto retenido $800 |
| Acumulador Servicios | Acumulado | Monto acumulado $4,000, Monto retenido $200 |
| Retencion Gan. 4ta Cat. | Cuenta Corriente | Registra $800 retenido |
| Retencion Gan. Servicios | Cuenta Corriente | Registra $200 retenido |
| Detalle Ret. 4ta Cat. | Detalle de Ganancia | Certificado #001 |
| Detalle Ret. Servicios | Detalle de Ganancia | Certificado #002 |
| Ingreso Tesoreria | Tesoreria | Registra $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:
| Movimiento | Tipo | Efecto |
|---|---|---|
| Orden de Pago | Cuenta Corriente | Registra $500 |
| Acumulador 4ta Cat | Acumulado | Monto 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.
| Dato | Descripcion | Restricciones |
|---|---|---|
| Identificador | Identificador unico de la orden | Generado automaticamente |
| Fecha | Fecha del pago | Requerida |
| Proveedor | Proveedor al que se realiza el pago | Requerido, debe existir |
| Monto | Monto total de la orden de pago | Requerido, mayor a cero |
| Comprobantes asociados | Comprobantes que se cancelan con este pago | Al menos uno requerido |
| Estado | Estado de la orden | Activa/Anulada |
Acumulador de Ganancias por Periodo
Representa el acumulado mensual de pagos y retenciones por proveedor y concepto de ganancia.
| Dato | Descripcion | Restricciones |
|---|---|---|
| Proveedor | Codigo del proveedor | Requerido |
| Mes | Mes del periodo | Requerido, entre 1 y 12 |
| Año | Año del periodo | Requerido |
| Concepto de ganancia | Concepto de ganancia | Requerido, debe existir |
| Monto acumulado | Monto total de pagos del periodo (monacu) | Mayor o igual a cero |
| Monto retenido | Monto 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).
| Dato | Descripcion | Restricciones |
|---|---|---|
| Identificador | Identificador unico del detalle | Generado automaticamente |
| Concepto de ganancia | Concepto de ganancia aplicado | Requerido, debe existir |
| Numero de certificado | Numero correlativo del certificado | Generado desde numeradores |
| Orden de pago | Orden de pago asociada | Requerida |
| Movimiento de retencion | Movimiento de cuenta corriente de la retencion | Requerido |
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.
| Dato | Descripcion | Restricciones |
|---|---|---|
| Código de Régimen | Código del concepto de ganancia | Requerido, único |
| Nombre | Descripción del concepto de ganancia | Requerido |
| Porcentaje para Inscriptos | Alícuota para proveedores inscriptos en ganancias | Entre 0 y 100 |
| Porcentaje para No Inscriptos | Alícuota para no inscriptos en ganancias | Entre 0 y 100 |
| Monto Mínimo | Monto mínimo no sujeto a retención de ganancia | Mayor o igual a cero |
| Cuenta Contable | Cuenta para imputación contable de la retención | Debe existir |
Movimiento de Cuenta Corriente
Registro de debitos y creditos en la cuenta del proveedor.
| Dato | Descripcion | Restricciones |
|---|---|---|
| Identificador | Identificador unico del movimiento | Generado automaticamente |
| Proveedor | Proveedor afectado | Requerido |
| Fecha | Fecha del movimiento | Requerida |
| Tipo | Debe o Haber | Requerido |
| Monto | Importe del movimiento | Mayor a cero |
| Origen | Orden de pago o retencion que origina el movimiento | Requerido |
Detalle de Ganancia
Registro del detalle de cada retención de ganancias efectivamente aplicada.
| Dato | Descripción | Restricciones |
|---|---|---|
| Código de Concepto | Concepto de retención aplicado | Requerido |
| Número de Certificado | Número correlativo del certificado emitido | Requerido |
| Orden de Pago | Orden de pago asociada | Requerida |
| Movimiento de Retención | Movimiento de cuenta corriente asociado | Requerido |
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.
| Dato | Descripcion | Restricciones |
|---|---|---|
| Identificador | Identificador unico | Generado automaticamente |
| Fecha | Fecha del movimiento | Requerida |
| Tipo | Ingreso o Egreso | Requerido |
| Monto | Importe del movimiento | Mayor a cero |
| Concepto | Descripcion del movimiento | Requerido |
| Origen | Retencion u orden de pago que origina el movimiento | Requerido |
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
| Validacion | Regla | Mensaje de error |
|---|---|---|
| Monto positivo | El monto de la orden debe ser mayor a cero | "El monto de la orden de pago debe ser mayor a cero" |
| Proveedor valido | El proveedor debe existir y estar activo | "El proveedor seleccionado no existe o no esta activo" |
| Comprobantes validos | Los comprobantes deben existir y tener saldo pendiente | "El comprobante no tiene saldo pendiente" |
Validaciones de conceptos de ganancia y montos
| Validacion | Regla | Mensaje de error |
|---|---|---|
| Concepto de ganancia activo | El concepto de ganancia debe estar activo | "El concepto de ganancia no esta disponible" |
| Monto base positivo | El monto base por concepto debe ser mayor a cero | "El monto base debe ser mayor a cero" |
| Concepto no duplicado | No puede haber dos conceptos de ganancia duplicados en una orden | "Ya existe el concepto de ganancia seleccionado" |
| Monto minimo configurado | El concepto de ganancia debe tener monto minimo configurado | "El concepto no tiene monto minimo configurado" |
| Periodo valido | Debe 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:
| Escenario | Accion en acugan | monret |
|---|---|---|
| Primera orden del mes $500 | Crea registro con monacu=$500 | NULL |
| Segunda orden del mes $300 | Actualiza monacu=$800 (500+300) | NULL |
| Tercera orden que retiene $100 | Actualiza 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 periodo | Monto minimo | Accion |
|---|---|---|
| $500 | $1,000 | NO retiene, solo acumula |
| $1,000 | $1,000 | SI retiene (alcanza el minimo) |
| $1,500 | $1,000 | SI 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,000RN-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:
- Pago en efectivo de $10,000: Se registra DEBE porque reduce el pasivo con el proveedor
- 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:
- Crear registro de detalle de ganancia
- Vincular con el concepto de ganancia utilizado
- Vincular con la orden de pago
- Registrar el monto base y el monto retenido
- Obtener y asignar numero de certificado correlativo desde la tabla
numeradores - 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=$80RN-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 Orden | Retenciones Existentes | Nueva Retencion | Permitido |
|---|---|---|---|
| $10,000 | $0 | $1,000 | Si |
| $10,000 | $9,000 | $1,000 | Si |
| $10,000 | $9,500 | $1,000 | No |
| $10,000 | $10,000 | $500 | No |
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:
- Primero: Registrar la orden de pago y su movimiento de cuenta corriente (DEBE)
- Segundo: Actualizar o crear acumuladores en acugan (monacu)
- Tercero: Evaluar si corresponde retener segun monto minimo
- 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:
- Recibe el total de retenciones calculado desde el frontend
- Calcula el monto neto restando las retenciones del total
- Registra la orden de pago por el monto neto (no por el total)
- 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:
- Obtener el numerador de la tabla
numeradoresusando la key 'retencion_ganancia' - Incrementar el valor del numerador en 1
- Asignar el numero obtenido como numero de certificado de la retencion de ganancia
- Actualizar el valor en la tabla
numeradores - Registrar el numero de certificado en la tabla
detgan(campo numret)
Numerador utilizado:
| Key en numeradores | Descripcion | Uso |
|---|---|---|
| retencion_ganancia | Certificados de retenciones de ganancias | Genera 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 certificadoNota 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:
- El usuario accede al modulo de Ordenes de Pago
- El usuario selecciona "Nueva Orden de Pago"
- El usuario selecciona el proveedor
- El usuario selecciona los comprobantes a cancelar
- El usuario indica monto de orden: $500
- El usuario selecciona concepto "Ganancias 4ta Cat" (monto minimo: $1,000)
- El usuario indica monto base: $500
- El sistema muestra resumen: Total $500, Retenciones $0, Neto $500
- El usuario confirma el registro
- El sistema registra la orden de pago (HABER $500)
- El sistema actualiza acugan: monacu = $500, monret = NULL
- El sistema NO genera movimiento de retencion (acumulado < minimo)
- El sistema NO genera certificado ni registra en detgan
- 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:
- El usuario accede al modulo de Ordenes de Pago
- El usuario selecciona "Nueva Orden de Pago"
- El usuario selecciona el proveedor
- El usuario selecciona los comprobantes a cancelar
- El usuario indica monto de orden: $500
- El usuario selecciona concepto "Ganancias 4ta Categoria"
- El usuario indica monto base: $500
- El sistema consulta acumulado previo: $600
- El sistema calcula acumulado total: $1,100 (supera minimo de $1,000)
- El sistema calcula retencion: $110 (10% de $1,100)
- El sistema muestra resumen: Total $500, Retenciones $110, Neto $390
- El usuario confirma el registro
- El sistema registra la orden de pago (HABER $500)
- El sistema actualiza acugan: monacu = $1,100, monret = $110
- El sistema registra movimiento de retencion (DEBE $110)
- El sistema obtiene numero de certificado desde numeradores (key: 'retencion_ganancia')
- El sistema registra en detgan con numero de certificado
- El sistema registra ingreso en tesoreria ($110)
- 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:
| Paso | Condicion | Accion |
|---|---|---|
| 12a | Error en registro | Revertir toda la transaccion |
| 16a | Error generando certificado | Revertir 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:
- El usuario selecciona proveedor y comprobantes
- El usuario indica monto de orden: $10,000
- El usuario agrega concepto "Ganancias 4ta Categoria" con monto base: $8,000
- El sistema calcula: acumulado = $9,500, supera minimo → retencion = $950
- El usuario agrega concepto "Ganancias Servicios" con monto base: $4,000
- El sistema calcula: acumulado = $4,500, supera minimo → retencion = $225
- El sistema muestra resumen: Total $10,000, Retenciones $1,175, Neto $8,825
- El usuario confirma el registro
- El sistema registra orden de pago (HABER $10,000)
- El sistema actualiza ambos acumuladores en acugan
- El sistema registra ambas retenciones en cuenta corriente (DEBE $950 + DEBE $225)
- El sistema genera dos certificados correlativos
- El sistema registra ambos detalles en detgan con certificados
- El sistema registra ingreso en tesoreria por $1,175
- 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:
- El usuario accede al listado de Ordenes de Pago
- El usuario localiza y selecciona "Ver Detalle" de la orden
- El sistema presenta informacion de la orden de pago
- 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
- El sistema muestra retenciones efectivas (si las hubo):
- Concepto, monto retenido, numero de certificado
- Opcion para imprimir cada certificado
- 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
- 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.
| Campo | Tipo | Descripcion |
|---|---|---|
| key | string(30) | Identificador unico del numerador (ej: 'retencion_ganancia') |
| value | integer | Valor 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.
| Campo | Tipo | Descripcion |
|---|---|---|
| codpro | integer | Codigo del proveedor |
| mes | smallinteger | Mes del periodo (1-12) |
| ano | smallinteger | Año del periodo |
| codgan | smallinteger | Codigo del concepto de ganancia |
| monacu | decimal(16,5) | Monto acumulado de pagos mensuales (netos) |
| monret | decimal(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).
| Campo | Tipo | Descripcion |
|---|---|---|
| id | integer | Identificador unico (PK) |
| codgan | smallinteger | Codigo del concepto de ganancia |
| numret | integer | Numero del certificado de retencion (obtenido de numeradores con key 'retencion_ganancia') |
| id_orden | uuid | Identificador de la orden de pago |
| id_mov_ret | uuid | Identificador del movimiento de cuenta corriente de la retencion |
Nivel: Empresa y Sucursal
Relaciones:
codgan→ Concepto de ganancia (tabla congan)id_orden→ Orden de pagoid_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
- Cálculo de Pagos Parciales: Cálculo de retenciones cuando hay pagos parciales sucesivos
- Acumulados de Ganancia: Explicación de la lógica de acumulados y período de acumulación
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
- Se permite anular una orden de pago con retenciones de ganancias? Que pasa con los movimientos y certificados generados?
- Existe un limite de retenciones de ganancias por orden de pago?
- Se debe poder imprimir el certificado de retencion de ganancias desde el sistema?
- Que formato debe tener el certificado de retencion de ganancias impreso (layout, datos obligatorios)?
- 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
| Fecha | Version | Autor | Descripcion |
|---|---|---|---|
| 2025-12-16 | 1.0 | Sistema | Creacion del documento de requerimientos de negocio |
| 2025-12-16 | 1.1 | Sistema | Agregado: generacion automatica de certificados desde tabla numeradores, referencias a estructuras en migrations/, regla de negocio RN-009 |
| 2025-12-16 | 1.2 | Sistema | Aclarado alcance: el proceso es exclusivamente para retenciones de GANANCIAS, no para otros tipos de retenciones (IIBB, SUSS, etc.) |
| 2025-12-16 | 2.0 | Sistema | Revision 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-16 | 2.1 | Sistema | Agregada 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-17 | 2.2 | Sistema | CORRECCIÓ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-17 | 2.3 | Sistema | CORRECCIÓ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-17 | 2.4 | Sistema | IMPLEMENTACIÓ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 |