Changes between Version 6 and Version 7 of SpecsFormulasCanon
- Timestamp:
- 04/02/12 13:47:39 (13 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SpecsFormulasCanon
v6 v7 1 1 [[TOC(Specs,SpecsModLiq,SpecsFórmulasCanon)]] 2 2 3 = Fórmulas de cálculo de Canon = 3 4 4 == Contexto == 5 6 5 El cálculo de las fórmulas de [wiki:Canon_Superficiario canon] para cada anualidad se hace de forma diferente dependiendo principalmente de: 7 6 8 * La ley que ampare el título9 * La etapa del título7 * La ley que ampare el título 8 * La etapa del título 10 9 11 10 Asímismo, cada ley hace uso de otras variables que ayudan al cálculo, como: 12 11 13 * Salario Mínimo Diario Legal Vigente (smdlv)14 * Anualidad15 * Área (Hectáreas)12 * Salario Mínimo Diario Legal Vigente (smdlv) 13 * Anualidad 14 * Área (Hectáreas) 16 15 17 16 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. 18 17 19 18 == Problemática == 20 21 19 El problema a solucionar es el siguiente: 22 20 23 * El usuario debe poder manejar las fórmulas de cálculo de canon desde el [wiki:mod_liq módulo de liquidaciones]24 * Las fórmulas se utilizan en el momento de generación de las liquidaciones25 * De forma periódica26 * Por demanda21 * El usuario debe poder manejar las fórmulas de cálculo de canon desde el [wiki:mod_liq módulo de liquidaciones] 22 * Las fórmulas se utilizan en el momento de generación de las liquidaciones 23 * De forma periódica 24 * Por demanda 27 25 28 26 == Conceptos == 29 30 27 === Algoritmo === 31 28 Para ilustrar esto de una forma más clara, podemos ver el cálculo para las leyes 685 y 1382, en [wiki:Etapa etapa] de '''exploración''': 32 29 33 30 ==== Ley 685 ==== 34 * Si el área no supera las 2000 hectáreas35 * El valor del canon es 1 smdlv por el área36 * Si el área es mayor a las 2000 hectáreas e inferior a las 500037 * El valor del canon es 2 smdlv por el área38 * Si el área es mayor a las 5000 hectáreas e inferior a las 1000039 * El valor del canon es 3 smdlv por el área31 * Si el área no supera las 2000 hectáreas 32 * El valor del canon es 1 smdlv por el área 33 * Si el área es mayor a las 2000 hectáreas e inferior a las 5000 34 * El valor del canon es 2 smdlv por el área 35 * Si el área es mayor a las 5000 hectáreas e inferior a las 10000 36 * El valor del canon es 3 smdlv por el área 40 37 41 38 ==== Ley 1382 ==== 42 * Si la anualidad actual es inferior a 5 años43 * El valor del canon es 1 smdlv por el área44 * Si la anualidad actual está entre 6 y 7 años45 * El valor del canon es 1.25 smdlv por el área46 * Si la anualidad actual es igual o superior a 8 años47 * El valor del canon es 1.5 smdlv por el área39 * Si la anualidad actual es inferior a 5 años 40 * El valor del canon es 1 smdlv por el área 41 * Si la anualidad actual está entre 6 y 7 años 42 * El valor del canon es 1.25 smdlv por el área 43 * Si la anualidad actual es igual o superior a 8 años 44 * El valor del canon es 1.5 smdlv por el área 48 45 49 46 Se pueden ver diferentes variables y constantes en estos cálculos. 50 47 51 48 === Lenguaje === 52 53 49 Descomponiendo este cálculo en diferentes elementos, podemos ver lo siguiente: 54 50 55 1. Ley 68551 1. Ley 685 56 52 57 53 ||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =|| 58 54 ||= Condición =|| SI || AREA || ENTRE || 0 || Y || 2000 || 59 55 ||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =|| 60 ||= Expresión =|| ENTONCES || 1 || * || SMDLV || * 56 ||= Expresión =|| ENTONCES || 1 || * || SMDLV || * || AREA || 61 57 ||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =|| 62 58 ||= Condición =|| SI || AREA || ENTRE || 2001 || Y || 5000 || 63 59 ||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =|| 64 ||= Expresión =|| ENTONCES || 2 || * || SMDLV || * 60 ||= Expresión =|| ENTONCES || 2 || * || SMDLV || * || AREA || 65 61 ||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =|| 66 62 ||= Condición =|| SI || AREA || ENTRE || 5001 || Y || 10000 || 67 63 ||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =|| 68 ||= Expresión =|| ENTONCES || 3 || * || SMDLV || * 64 ||= Expresión =|| ENTONCES || 3 || * || SMDLV || * || AREA || 69 65 70 2. Ley 138266 2. Ley 1382 71 67 72 68 ||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =|| 73 69 ||= Condición =|| SI || ANUALIDAD || ENTRE || 1 || Y || 5 || 74 70 ||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =|| 75 ||= Expresión =|| ENTONCES || 1 || * || SMDLV || * 71 ||= Expresión =|| ENTONCES || 1 || * || SMDLV || * || AREA || 76 72 ||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =|| 77 73 ||= Condición =|| SI || ANUALIDAD || ENTRE || 6 || Y || 7 || 78 74 ||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =|| 79 ||= Expresión =|| ENTONCES || 1.25 || * || SMDLV || * 75 ||= Expresión =|| ENTONCES || 1.25 || * || SMDLV || * || AREA || 80 76 ||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =|| 81 ||= Condición =|| SI || ANUALIDAD || MAYOR || 8 || ||||77 ||= Condición =|| SI || ANUALIDAD || MAYOR || 8 || || || 82 78 ||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =|| 83 ||= Expresión =|| ENTONCES || 1.5 || * || SMDLV || * 79 ||= Expresión =|| ENTONCES || 1.5 || * || SMDLV || * || AREA || 84 80 85 81 Podemos ver entonces que hay un ''léxico'' específico que involucra identificar... 86 82 87 * Evaluación88 * Variable (o parámetro)89 * Constante90 * Operador83 * Evaluación 84 * Variable (o parámetro) 85 * Constante 86 * Operador 91 87 92 88 ...Para cada ''Elemento'', y que cada ''Elemento'' se comporta de forma diferente, es decir, tiene una ''semántica'' inherente. … … 94 90 También se puede ver que cada ''Condición'' viene acompañada de una ''Expresión'', van por pares de esta forma: 95 91 96 * Condición '''1'''97 * Expresión '''1'''98 * Condición '''2'''99 * Expresión '''2'''100 * ...101 * ...102 * Condición '''n'''103 * Expresión '''n'''92 * Condición '''1''' 93 * Expresión '''1''' 94 * Condición '''2''' 95 * Expresión '''2''' 96 * ... 97 * ... 98 * Condición '''n''' 99 * Expresión '''n''' 104 100 105 101 Con estos elementos, podemos definir un léxico formal. 106 102 107 103 ==== Léxico ==== 108 109 104 El siguiente léxico toma elementos de [http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form BNF]: 110 105 111 * <if> ::= [ if ]112 * <then> ::= [ then ]113 * <sep> ::= <espacio>114 * <brk> ::= <retorno>115 * <constante> ::= [ float ]116 * <variable> ::= [ param ]117 * <valor> ::= <constante> | <variable>118 * <ope. cond.>::= [ > | < | >= | <= | == | != ]119 * <evaluación condicional> ::= <valor> <sep> <ope. cond.> <sep> <valor> | <valor> <sep> <between> <valor> <and> <valor>120 * <ope. mat> ::= [ + | - | * | / ]121 * <evaluación matemática>:= <valor> <sep> <ope. mat> <sep> <valor> [ <sep> <ope. mat> <sep> <valor> ] * | (<evaluación matemática>) [<sep> <ope. mat> <evaluación matemática> ] *122 * <condición> ::= <if> <sep> <evaluación condicional>123 * <expresión> ::= <then> <sep> <evaluación matemática>124 * <fórmula> ::= <condición> <brk> <expresión> [<brk> <condición> <brk> <expresión> ] *106 * <if> ::= [ if ] 107 * <then> ::= [ then ] 108 * <sep> ::= <espacio> 109 * <brk> ::= <retorno> 110 * <constante> ::= [ float ] 111 * <variable> ::= [ param ] 112 * <valor> ::= <constante> | <variable> 113 * <ope. cond.>::= [ > | < | >= | <= | == | != ] 114 * <evaluación condicional> ::= <valor> <sep> <ope. cond.> <sep> <valor> | <valor> <sep> <between> <valor> <and> <valor> 115 * <ope. mat> ::= [ + | - | * | / ] 116 * <evaluación matemática>:= <valor> <sep> <ope. mat> <sep> <valor> [ <sep> <ope. mat> <sep> <valor> ] * | (<evaluación matemática>) [<sep> <ope. mat> <evaluación matemática> ] * 117 * <condición> ::= <if> <sep> <evaluación condicional> 118 * <expresión> ::= <then> <sep> <evaluación matemática> 119 * <fórmula> ::= <condición> <brk> <expresión> [<brk> <condición> <brk> <expresión> ] * 125 120 126 121 == Implementación == 127 128 122 === Liquidaciones automáticas === 129 130 123 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: 131 124 132 133 '''Si''' título'''.'''anualidad actual'''.'''fecha '''<=''' hoy '''+''' lapso establecido 134 '''entonces''' ''ejecutar liquidación en título'' 135 125 ''' Si''' título''' .''' anualidad actual''' .''' fecha ''' <=''' hoy ''' +''' lapso establecido 126 ''' entonces''' '' ejecutar liquidación en título'' 136 127 137 128 Y ''ejecutar liquidación en título'' sería: 138 129 139 1. Cargar datos de la liquidación140 2. Evaluar fórmula130 1. Cargar datos de la liquidación 131 1. Evaluar fórmula 141 132 142 valor de liquidación = 143 ( 144 ''ejecutar fórmula'' para 145 ''norma'' '''=''' título'''.'''norma actual, 146 ''etapa'' '''=''' título'''.'''etapa actual, ''anualidad'' '''=''' título'''.'''anualidad_actual, 133 valor de liquidación = ( 134 '' ejecutar fórmula'' para 135 '' norma'' ''' =''' título''' .''' norma __actual__, 136 ''etapa'' ''' =''' título''' .''' etapa __actual__, 137 ''anualidad'' ''' =''' título''' .''' anualidad __actual__, 138 ''área'' '''=''' título '''.''' área __actual__ 139 ''smdlv'' '''=''' smdlv __vigente a la fecha__ 147 140 ) 148 141 149 142 Y ''ejecutar fórmula'' sería: 150 * Entender fórmula 151 * Reemplazar parámetros 152 * Buscar valores de variables153 * Ejecutar fórmula143 144 * Entender fórmula 145 * Reemplazar parámetros 146 * Ejecutar fórmula 154 147 155 148 === Liquidaciones por demanda === 156 157 158 159