Changes between Version 6 and Version 7 of SpecsFormulasCanon


Ignore:
Timestamp:
04/02/12 13:47:39 (15 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