domingo, 18 de noviembre de 2018

► Cálculos de periodos de Vigencia


A menudo nos encontramos con que tenemos una entidad que tiene fecha de inicio y fecha fin.
Ej: Fechas de inicio y fin de una póliza de seguros, Fecha de alta y Baja de un abonado, Fecha de creación y desaparición de una empresa… etc
Y nos surge la necesidad de ver si esa entidad estaba activa en un año o mes determinado. Se puede hacer creando expresiones con set analysis que comprueben ambas fechas, pero la forma más cómoda es calculando todas las fechas en el script.
Para ello creamos una tabla auxiliar que contenga las fechas de vigencia de la entidad en cuestión.
Vamos a ver el ejemplo de fechas de vigencia de Pólizas donde existe una tabla POLIZAS con los campos %POLIZA como clave única,      F_ALTA_POLIZA  como Fecha de inicio y F_BAJA_POLIZA como fecha de fin.

TMP1:
LOAD DISTINCT
     %POLIZA,
     F_ALTA_POLIZA  AS FechaInicio,
     RANGEMIN(F_BAJA_POLIZA,TODAY()) AS FechaFin //Si no tiene fecha de baja, las limitamos a hoy o al fecha que queramos.
RESIDENT POLIZAS;

FECHAS_VIGENCIA_POLIZA:
LOAD
  %POLIZA,
  Year(AddMonths(FechaInicio, IterNo() - 1)) AS AÑO_VIG_POLIZA,
  Month(AddMonths(FechaInicio, IterNo() - 1)) AS MES_VIG_POLIZA,
DUAL(Month(AddMonths(FechaInicio, IterNo() - 1))&'-'&Year(AddMonths(FechaInicio, IterNo() - 1))
             ,
     Year(AddMonths(FechaInicio, IterNo() - 1)) * 100 +     Month(AddMonths(FechaInicio, IterNo() - 1)))   AS AÑOMES_VIG_POLIZA
Resident TMP1
While Num(Year(AddMonths(FechaInicio, IterNo() - 1)) * 100 +
       Month(AddMonths(FechaInicio, IterNo() - 1))) <=
       Num(Year(FechaFin) * 100 + Month(FechaFin))
;

DROP Table TMP1;



Usamos la función DUAL para obtener el AÑOMES_VIG_POLIZA en los formatos
Ene-2018 (texto) y 201801 (número). De esta forma en un selector podemos usar la representación de Texto, más amigable para el usuario, y en una expresión podemos usar el formato numérico.

No hay comentarios:

Publicar un comentario