Changes between Version 6 and Version 7 of SpecsFormulasCanon


Ignore:
Timestamp:
04/02/12 13:47:39 (13 years ago)
Author:
David
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SpecsFormulasCanon

    v6 v7  
    11[[TOC(Specs,SpecsModLiq,SpecsFórmulasCanon)]]
     2
    23= Fórmulas de cálculo de Canon =
    3 
    44== Contexto ==
    5 
    65El cálculo de las fórmulas de [wiki:Canon_Superficiario canon] para cada anualidad se hace de forma diferente dependiendo principalmente de:
    76
    8 * La ley que ampare el título
    9 * La etapa del título
     7 * La ley que ampare el título
     8 * La etapa del título
    109
    1110Asímismo, cada ley hace uso de otras variables que ayudan al cálculo, como:
    1211
    13 * Salario Mínimo Diario Legal Vigente (smdlv)
    14 * Anualidad
    15 * Área (Hectáreas)
     12 * Salario Mínimo Diario Legal Vigente (smdlv)
     13 * Anualidad
     14 * Área (Hectáreas)
    1615
    1716Así 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.
    1817
    1918== Problemática ==
    20 
    2119El problema a solucionar es el siguiente:
    2220
    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 liquidaciones
    25   * De forma periódica
    26   * Por demanda
     21 * 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
    2725
    2826== Conceptos ==
    29 
    3027=== Algoritmo ===
    3128Para 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''':
    3229
    3330==== Ley 685 ====
    34 * Si el área no supera las 2000 hectáreas
    35  * El valor del canon es 1 smdlv por el área
    36 * Si el área es mayor a las 2000 hectáreas e inferior a las 5000
    37  * El valor del canon es 2 smdlv por el área
    38 * Si el área es mayor a las 5000 hectáreas e inferior a las 10000
    39  * El valor del canon es 3 smdlv por el área
     31 * 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
    4037
    4138==== Ley 1382 ====
    42 * Si la anualidad actual es inferior a 5 años
    43  * El valor del canon es 1 smdlv por el área
    44 * Si la anualidad actual está entre 6 y 7 años
    45  * El valor del canon es 1.25 smdlv por el área
    46 * Si la anualidad actual es igual o superior a 8 años
    47  * El valor del canon es 1.5 smdlv por el área
     39 * 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
    4845
    4946Se pueden ver diferentes variables y constantes en estos cálculos.
    5047
    5148=== Lenguaje ===
    52 
    5349Descomponiendo este cálculo en diferentes elementos, podemos ver lo siguiente:
    5450
    55 1. Ley 685
     51 1. Ley 685
    5652
    5753||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =||
    5854||= Condición =|| SI || AREA || ENTRE || 0 || Y || 2000 ||
    5955||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =||
    60 ||= Expresión =|| ENTONCES || 1 || * || SMDLV || *  || AREA ||
     56||= Expresión =|| ENTONCES || 1 || * || SMDLV || * || AREA ||
    6157||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =||
    6258||= Condición =|| SI || AREA || ENTRE || 2001 || Y || 5000 ||
    6359||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =||
    64 ||= Expresión =|| ENTONCES || 2 || * || SMDLV || *  || AREA ||
     60||= Expresión =|| ENTONCES || 2 || * || SMDLV || * || AREA ||
    6561||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =||
    6662||= Condición =|| SI || AREA || ENTRE || 5001 || Y || 10000 ||
    6763||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =||
    68 ||= Expresión =|| ENTONCES || 3 || * || SMDLV || *  || AREA ||
     64||= Expresión =|| ENTONCES || 3 || * || SMDLV || * || AREA ||
    6965
    70 2. Ley 1382
     66 2. Ley 1382
    7167
    7268||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =||
    7369||= Condición =|| SI || ANUALIDAD || ENTRE || 1 || Y || 5 ||
    7470||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =||
    75 ||= Expresión =|| ENTONCES || 1 || * || SMDLV || *  || AREA ||
     71||= Expresión =|| ENTONCES || 1 || * || SMDLV || * || AREA ||
    7672||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =||
    7773||= Condición =|| SI || ANUALIDAD || ENTRE || 6 || Y || 7 ||
    7874||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =||
    79 ||= Expresión =|| ENTONCES || 1.25 || * || SMDLV || *  || AREA ||
     75||= Expresión =|| ENTONCES || 1.25 || * || SMDLV || * || AREA ||
    8076||= Elemento =||= Evaluación =||= Variable =||= Operador =||= Constante =||= Operador =||= Constante =||
    81 ||= Condición =|| SI || ANUALIDAD || MAYOR || 8 ||  || ||
     77||= Condición =|| SI || ANUALIDAD || MAYOR || 8 || || ||
    8278||= Elemento =||= Evaluación =||= Constante =||= Operador =||= Variable =||= Operador =||= Variable =||
    83 ||= Expresión =|| ENTONCES || 1.5 || * || SMDLV || *  || AREA ||
     79||= Expresión =|| ENTONCES || 1.5 || * || SMDLV || * || AREA ||
    8480
    8581Podemos ver entonces que hay un ''léxico'' específico que involucra identificar...
    8682
    87 * Evaluación
    88 * Variable (o parámetro)
    89 * Constante
    90 * Operador
     83 * Evaluación
     84 * Variable (o parámetro)
     85 * Constante
     86 * Operador
    9187
    9288...Para cada ''Elemento'', y que cada ''Elemento'' se comporta de forma diferente, es decir, tiene una ''semántica'' inherente.
     
    9490También se puede ver que cada ''Condición'' viene acompañada de una ''Expresión'', van por pares de esta forma:
    9591
    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'''
    104100
    105101Con estos elementos, podemos definir un léxico formal.
    106102
    107103==== Léxico ====
    108 
    109104El siguiente léxico toma elementos de [http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form BNF]:
    110105
    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> ] *
    125120
    126121== Implementación ==
    127 
    128122=== Liquidaciones automáticas ===
    129 
    130123Las 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:
    131124
    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''
    136127
    137128Y ''ejecutar liquidación en título'' sería:
    138129
    139 1. Cargar datos de la liquidación
    140 2. Evaluar fórmula
     130 1. Cargar datos de la liquidación
     131 1. Evaluar fórmula
    141132
    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__
    147140  )
    148141
    149142Y ''ejecutar fórmula'' sería:
    150 * Entender fórmula
    151 * Reemplazar parámetros
    152 * Buscar valores de variables
    153 * Ejecutar fórmula
     143
     144 * Entender fórmula
     145 * Reemplazar parámetros
     146 * Ejecutar fórmula
    154147
    155148=== Liquidaciones por demanda ===
    156 
    157 
    158 
    159