CalcVtoFac - Calculo de Vencimiento de Factura Vtas.
INTRODUCCIÓN
Este servicio calcula los vencimientos de una factura a partir de la fecha del documento, la forma de pago y las condiciones de venta asociadas. Soporta esquemas complejos de pago como
cuotas, fechas fijas, días hábiles, días de la semana configurados, feriados, y separación del monto de impuestos.
INFORMACIÓN GENERAL
Nombre del servicia CalcVtoFac
Clase: CalcVtoFacBean
JNDI: nodum/servicios/contable/ini/IniCalcVtoFac
Tipo: Inicialización
Módulo: Básicos
Modo de ejecución: Directo
Repetitivo: No
PARAMETRO DE ENTRADAS
| Parametro | Literal | Valor | Obligario |
| Importe Neto | Importe Neto | V | |
| Importe Total | Importe Total | V | |
| Fecha de Calculo | Fecha de Calculo | V | |
| Forma de Pafo | Cod. Forma de Pago | V | |
| Fecha Vto. Manua | Fecha Vencimiento Manual | V |
FORMATO DE SALIDA
La salida es una lista de vencimientos con sus fechas y montos correspondientes.
| Posicion | Descripcion | Tipo | Ejemplo |
| [i][0] | Fecha de Vencimiento | Date | 29/07/2025 |
| [i][0] | Monto asociado | double | 84.46 |
LÓGICA INTERNA
VALIDACIÓN Y CONVERSIÓN DE ENTRADA
- Se validan y convierten los parámetros de entrada (fechas, importes, códigos).
- Se verifica la existencia de columnas opcionales en la tabla ct_formaspag que habilitan cálculos avanzados:
- tipo_plazolibre: indica si el plazo libre se expresa en días o meses.
- tipo_plazocuotas: define la unidad (DÍA o MES) del espaciado entre cuotas.
- tipo_plazoimpu: define la unidad del plazo impositivo.
- tipo_dia: tipo de día a considerar (HÁBIL o CORRIDO).
- cod_diaspago: referencia para el uso del servicio externo IniFecTes para ajustar días válidos de pago.
- dia_de_semana: día de la semana preferido para vencimiento.
- ajusta_dia: indica si debe ajustarse la fecha al final de mes si corresponde.
- Si hay configuración de días hábiles, se cargan feriados desde la tabla gl_feriados.
OBTENCIÓN DE PARÁMETROS DE FORMA DE PAGO
-
Se recuperan desde la tabla ct_formaspag los parámetros que afectan el cálculo:
-
cod_tipo_finic: Tipo de fecha inicial (ver sección siguiente).
-
cod_condvta: Condición de venta (ej. CONTADO, CREDITO, ANTICIPO).
-
plazo_libre: Tiempo de espera antes de generar el primer vencimiento.
-
cant_cuotas: Número total de cuotas a generar.
-
plazo_cuotas: Intervalo entre cuotas.
-
porc_prim_cuota: Porcentaje de la primera cuota.
-
ind_impu: Si los impuestos se calculan de forma separada.
-
fec_inic_impu y plazo_impu: base y duración para vencimientos impositivos.
-
fec_fija_fp: Fecha fija de pago si aplica.
-
ajusta_dia: Ajuste del día si cae en fin de mes.
-
tipo_día, tipo_plazoXXX, cod_diaspago, dia_de_semana: usados para ajustar la lógica
de cálculo.
-
- Además, si existe la tabla ct_fpcuotas, se consultan los porcentajes personalizados por número de cuota.
DETERMINACIÓN DE LA FECHA INICIAL DE CÁLCULO
Según cod_tipo_finic, se determina la fecha base para calcular los vencimientos:
| Codigo | Descripion |
| 1 | Fecha del documento |
| 2 | Primer día de la quincena de la compra |
| 3 | Primer día del mes de la compra |
| 5 | Fecha de vencimiento ingresada manualmente |
| 7 | Fecha fija establecida en la forma de pago |
| 8 | Último día del mes de la compra |
| 9 | Primer día de la semana de la compra |
| 10 | Día específico del mes según la configuración |
LÓGICA DE GENERACIÓN DE VENCIMIENTOS
A. Si la condición de venta es CONTADO o ANTICIPO:
- Se genera un solo vencimiento con el monto total y la fecha inicial.
B. Si existen cuotas:
1. Se determina el monto de la primera cuota:
- Según el valor de porc_prim_cuota, o
- Según la tabla ct_fpcuotas si está definida.
2. Las siguientes cuotas se distribuyen proporcionalmente.
3. La fecha de cada cuota se calcula aplicando el plazo_cuotas desde la anterior.
4. Si está configurado como día hábil (tipo_dia = HABIL), se excluyen fines de semana y
feriados.
5. Si se define cod_diaspago, se invoca el servicio IniFecTes para ajustar la fecha al día hábil
más próximo.
6. Si se define dia_de_semana, la fecha se ajusta hacia atrás hasta ese día en la misma
semana.
7. Si ajusta_dia = S, y la cuota cae al fin de mes, se mueve al último día hábil del mes.
VENCIMIENTO DEL COMPONENTE DE IMPUESTOS (SI IND_IMPU = S)
- Se calcula una fecha separada para el importe del IVA.
- Usa fec_inic_impu como base y plazo_impu como duración.
- También respeta configuraciones como:
- tipo_plazoimpu: días o meses.
-
tipo_dia: hábil o corrido.
ajusta_dia y cod_diaspago (si aplica).
EJEMPLO
Supongamos una factura emitida el jueves 10 de julio de 2025, con:
- Importe Neto: 3000
- Importe Total: 3660 (IVA incluido)
- Forma de Pago: BL3
Fecha de Vencimiento Manual: vacía (no se usa)
Configuración de la forma de pago BL3 en ct_formaspag:
-
cod_tipo_finic: 1> Fecha del documento
-
plazo_libre: 0
-
cant_cuotas: 3
-
plazo_cuotas: 30
-
porc_prim_cuota: 40
-
tipo_plazocuotas: DIA
tipo_dia: HABIL
Feriados confirmados en Uruguay (2025):
- 18 de julio.
- 25 de agosto.
Lógica del servicio aplicada
Fecha inicial de cálculo:
cod_tipo_finic = 1> se usa 10/07/2025.
Se valida si se deben usar días hábiles:
tipo_dia = HABIL -> se excluyen fines de semana y feriados (18/07/2025).
Distribución de cuotas:
Cuota 1: 40% de 3660 = 1464.00
Cuotas 2 y 3: 30% de 3660 = 1098.00 cada una
Cálculo de fechas de vencimiento usando días hábiles:
Cuota 1 (0 días):
10/07/2025 -> jueves -> hábil -> se mantiene.
Cuota 2 (30 días hábiles):
Avanzando desde 10/07/2025, saltando fines de semana y el feriado del 18/07, la fecha cae en:
-> 22/08/2025 (viernes)
MANUAL TÉCNICO
Cuota 3 (30 días hábiles desde la anterior):
FUNCIONALIDAD
Desde 22/08/2025, saltando fines de semana y 25/08 (feriado):
-> 03/10/2025 (viernes)
Salida:
| Fecha Vencimiento | Importe |
| 10/07/2025 | 1464.00 |
| 22/08/2025 | 1098.00 |
| 03/10/2025 | 1098.00 |
EJEMPLO DÍAS CORRIDOS Y FECHA MANUAL
Este ejemplo sirve para mostrar cómo se calcula el vencimiento cuando el tipo de día es CORRIDO
(es decir, sin excluir feriados ni fines de semana), y se usa una fecha de vencimiento manual
(cod_tipo_finic = 5).
Supuestos
- Importe Neto: 2000
- Importe Total: 2440
- Fecha de Documento: 01/07/2025
- Fecha de Vencimiento Manual: 15/07/2025
- Forma de Pago: VC1
Configuración de VC1 en ct_formaspag:
- cod_tipo_finic = 5> usar la fecha manual
- plazo_libre = 0
- cant_cuotas = 2
- plazo_cuotas = 15
- tipo_plazocuotas = DIA
- tipo_dia = CORRIDO
- porc_prim_cuota = 60
Cálculo
1. Fecha inicial = 15/07/2025 (fecha vencimiento manual)
2. No se consideran feriados ni fines de semana.
3. Distribución de cuotas:
- Cuota 1: 60% de 2440 = 1464.00
- Cuota 2: 40% de 2440 = 976.00
4. Fechas de vencimiento:
- Cuota 1: 15/07/2025
- Cuota 2: 15/07 + 15 días corridos ->30/07/2025
| Fecha Vencimiento | Importe |
| 20/07/2025 | 1830.00 |
