Version 16 (modified by 13 years ago) ( diff ) | ,
---|
TOC(Specs,SpecsModLiq,SpecsFormulasCanon)
Fórmulas de cálculo de Canon
Contexto
El cálculo de las fórmulas de canon para cada anualidad se hace de forma diferente dependiendo principalmente de:
- La ley que ampare el título
- La etapa del título
Asímismo, cada ley hace uso de otras variables que ayudan al cálculo, como:
- Salario Mínimo Diario Legal Vigente (smdlv)
- Anualidad
- Área (Hectáreas)
Así que para hacer una formulación efectiva para cada etapa, es necesario contar con fórmulas que puedan ser procesadas y ejecutadas de forma automática. Estas fórmulas deben contar con una cadena de condiciones que determinen el valor del canon para cada una de estas condiciones.
Problemática
El problema a solucionar es el siguiente:
- El usuario debe poder manejar las fórmulas de cálculo de canon desde el módulo de liquidaciones
- Las fórmulas se utilizan en el momento de generación de las liquidaciones
- De forma periódica
- Por demanda
Conceptos
Algoritmo
Para ilustrar esto de una forma más clara, podemos ver el cálculo para las leyes 685 y 1382, en etapa de exploración:
Ley 685
- Si el área no supera las 2000 hectáreas
- El valor del canon es 1 smdlv por el área
- Si el área es mayor a las 2000 hectáreas e inferior a las 5000
- El valor del canon es 2 smdlv por el área
- Si el área es mayor a las 5000 hectáreas e inferior a las 10000
- El valor del canon es 3 smdlv por el área
Ley 1382
- Si la anualidad actual es inferior a 5 años
- El valor del canon es 1 smdlv por el área
- Si la anualidad actual está entre 6 y 7 años
- El valor del canon es 1.25 smdlv por el área
- Si la anualidad actual es igual o superior a 8 años
- El valor del canon es 1.5 smdlv por el área
Se pueden ver diferentes variables y constantes en estos cálculos.
Lenguaje
Descomponiendo este cálculo en diferentes elementos, podemos ver lo siguiente:
- Ley 685
Elemento | Evaluación | Variable | Operador | Constante | Operador | Constante |
---|---|---|---|---|---|---|
Condición | SI | AREA | ENTRE | 0 | Y | 2000 |
Elemento | Evaluación | Constante | Operador | Variable | Operador | Variable |
Expresión | ENTONCES | 1 | * | SMDLV | * | AREA |
Elemento | Evaluación | Variable | Operador | Constante | Operador | Constante |
Condición | SI | AREA | ENTRE | 2001 | Y | 5000 |
Elemento | Evaluación | Constante | Operador | Variable | Operador | Variable |
Expresión | ENTONCES | 2 | * | SMDLV | * | AREA |
Elemento | Evaluación | Variable | Operador | Constante | Operador | Constante |
Condición | SI | AREA | ENTRE | 5001 | Y | 10000 |
Elemento | Evaluación | Constante | Operador | Variable | Operador | Variable |
Expresión | ENTONCES | 3 | * | SMDLV | * | AREA |
- Ley 1382
Elemento | Evaluación | Variable | Operador | Constante | Operador | Constante |
---|---|---|---|---|---|---|
Condición | SI | ANUALIDAD | ENTRE | 1 | Y | 5 |
Elemento | Evaluación | Constante | Operador | Variable | Operador | Variable |
Expresión | ENTONCES | 1 | * | SMDLV | * | AREA |
Elemento | Evaluación | Variable | Operador | Constante | Operador | Constante |
Condición | SI | ANUALIDAD | ENTRE | 6 | Y | 7 |
Elemento | Evaluación | Constante | Operador | Variable | Operador | Variable |
Expresión | ENTONCES | 1.25 | * | SMDLV | * | AREA |
Elemento | Evaluación | Variable | Operador | Constante | Operador | Constante |
Condición | SI | ANUALIDAD | MAYOR | 8 | ||
Elemento | Evaluación | Constante | Operador | Variable | Operador | Variable |
Expresión | ENTONCES | 1.5 | * | SMDLV | * | AREA |
Podemos ver entonces que hay un léxico específico que involucra identificar...
- Evaluación
- Variable (o parámetro)
- Constante
- Operador
...Para cada Elemento, y que cada Elemento se comporta de forma diferente, es decir, tiene una semántica inherente.
También se puede ver que cada Condición viene acompañada de una Expresión, van por pares de esta forma:
- Condición 1
- Expresión 1
- Condición 2
- Expresión 2
- ...
- ...
- Condición n
- Expresión n
Con estos elementos, podemos definir un léxico formal.
Léxico
El siguiente léxico toma elementos de BNF:
- <if> ::= [ if ]
- <then> ::= [ then ]
- <sep> ::= <espacio>
- <brk> ::= <retorno>
- <constante> ::= [ float ]ecuación
- <variable> ::= "$" [ identificador ]
- <valor> ::= <constante> | <variable>
- <ope. cond.>::= [ > | < | >= | <= | == | != ]
- <ecuación condicional> ::=
- <valor> <sep> <ope. cond.> <sep> <valor> |
- <valor> <sep> <between> <valor> <and> <valor> |
- <ecuación condicional> <sep> <ope. cond.> <sep> <ecuación condicional> [<sep> <ope. cond.> <ecuación condicional>] |
- (<ecuación condicional>) [<sep> <ope. cond.> <ecuación condicional> ] *
- <ope. mat> ::= [ + | - | * | / ]
- <ecuación matemática>:=
- <valor> <sep> <ope. mat> <sep> <valor> [ <sep> <ope. mat> <sep> <valor> ] * |
- (<ecuación matemática>) [<sep> <ope. mat> <ecuación matemática> ] *
- <condición> ::= <if> <sep> <ecuación condicional>
- <expresión> ::= <then> <sep> <ecuación matemática>
- <fórmula> ::= <condición> <brk> <expresión> [<brk> <condición> <brk> <expresión> ] *
Implementación
Para implementar el manejo de las fórmulas, es necesario efectuar 3 acciones:
- Entender fórmula
- Reemplazar parámetros
- Ejecutar fórmula
Clases
Con el léxico se pueden identificar las siguientes clases o entidades:
- Variable
- Operador Matemático
- Operador Condicional
- Tipo Condición
- Condición
- Expresión
- Fórmula
- Entendedor de fórmulas
Variable
Representa un parámetro o variable el cual tiene un valor.
Operador Matemático
Enumerador con los valores: "+","-","*","/".
Operador Condicional
Enumerador con los valores: "and","or","between",">",<",">=","<=","==","!=".
Tipo Condición
Las condiciones pueden ser de tipo "NORMAL" o "BETWEEN".
Condición
Se encarga de representar una condición, tiene los siguientes atributos:
- Variables
- Operadores
- Tipo Condición
- Sub Condición
Y tiene las siguientes funciones:
- Administrar Atributos
- Ejecutar
Expresión
Se encarga de representar una expresión, tiene los siguientes atributos:
- Variables
- Operadores
- Sub Expresión
Y tiene las siguientes funciones:
- Administrar Atributos
- Ejecutar
Fórmula
Se encarga de representar una fórmula, tiene los siguientes atributos:
- Hash<Condición, Expresión>
Y tiene las siguientes funciones:
- Administrar <Condiciones, Expresiones>
- Ejecutar
Entendedor de fórmulas
Se encarga de entender la fórmula y traducirla en una clase tipo Fórmula.
Implementación Específica
Liquidaciones automáticas
Las liquidaciones automáticas se hacen para aquellos títulos que estén próximos a cumplir su siguiente anualidad, es decir, aquellos que la fecha de hoy más un lapso establecido, sea mayor o igual al cumpleaños. En pseudo código:
Si título . anualidad actual . fecha <= hoy + lapso establecido
entonces ejecutar liquidación en título
Y ejecutar liquidación en título sería:
- Cargar datos de la liquidación
- Evaluar fórmula
valor de liquidación = (
ejecutar fórmula para
- norma = título . norma actual
- etapa = título . etapa actual
- anualidad = título . anualidad actual
- área = título . área actual
- smdlv = smdlv vigente a la fecha
)
Liquidaciones por demanda
Las liquidaciones por demanda se hacen a través de un diálogo con el usuario, en donde el usuario puede filtrar diferentes títulos y seleccionar las anualidades para las cuales se hará liquidación. Cambian entonces los parámetros de uso:
- norma = título . norma vigente hasta la fecha inicial de la anualidad
- etapa = título . etapa de la anualidad
- anualidad = título . anualidad seleccionada
- área = título . área vigente a la fecha inicial de la anualidad
- smdlv = smdlv vigente a la fecha inical de la anualidad
La tabla de variables contiene los ids que se deben reemplazar con los valores. Los ids son precedidos por el símbolo $ en la fórmula.
Ejemplo:
Tabla de Variables
id | tabla | campo |
---|---|---|
1 | ca_smdlv | valor_mensual |
2 | in_titulo_area | area |
3 | ca_anual_etapa | anualidad |
Fórmula Ley 1382 etapa Exploración:
if $3 <= 5 then $1 / 30 * $2 / 1000 ...
y se tiene en memoria un record con:
- valor_mensual=500,000.00
- area = 1000
- anualidad = 3
Se reemplazan los valores en la fórmula:
if 3 <= 5 then 500000 / 30 * 1000 / 1000 ...
Y se ejecuta la fórmula para obtener el valor.
Despliegue
Edición GWT
Para GWT, para la administración de fórmulas, los siguientes Mockups ilustran el formulario de captura de fórmulas:
Ha 2 tipos de condiciones:
Normal:
Between:
Las variables pueden ser Valor o Parámetro:
Las expresiones se construyen de la siguiente forma:
Si se quiere agregar un <operador> <variable> debe darse click en un botón en el lado derecho.
El despliegue del formulario muestra una pareja condición / expresión inicial, con un botón de (+) para agregar más parejas en la parte inferior:
Las fórmulas se guardan de la siguiente forma:
- Las variables se reemplazan por $<id_variable>
- Las constantes se guardan con su valor
Ejemplo:
Tabla de Variables
id | tabla | campo |
---|---|---|
1 | ca_smdlv | valor_mensual |
2 | in_titulo_area | area |
3 | ca_anual_etapa | anualidad |
Fórmula Ley 685 etapa Exploración:
if $2 between 0 and 2000 then $1 / 30 * $2 / 1000 ...
Fórmula Ley 1382 etapa Exploración:
if $3 <= 5 then $1 / 30 * $2 / 1000 ...
Attachments (8)
- formula001.png (35.4 KB ) - added by 13 years ago.
- formula002.png (118.9 KB ) - added by 13 years ago.
- formula003.png (137.9 KB ) - added by 13 years ago.
- formula004.png (117.2 KB ) - added by 13 years ago.
- formula005.png (106.1 KB ) - added by 13 years ago.
- formula006.png (221.1 KB ) - added by 13 years ago.
- formula007.png (28.0 KB ) - added by 13 years ago.
-
Despliegue.png
(51.5 KB
) - added by 13 years ago.
Diagrama de Despliegue
Download all attachments as: .zip