Skip to content

Jurisdicciones

Dentro de Optim, usamos el término Jurisdicción para referirnos a una entidad concreta que tiene sus propias reglas para determinar como liquidar el suministro de energía. Así, Córdoba, Santa Fe, Buenos Aires y CABA son jurisdicciones dentro de la plataforma. Si bien en los ejemplos listados son distritos de Argentina, pueden no serlo. Por ejemplo, una cooperativa podría tener sus propias reglas para el costo de energía y pasaría a ser una jurisdicción dentro de la plataforma.

Cada jurisdicción en la plataforma tiene las siguientes características:

  • Un vocabulario propio que se mapea dentro de la plataforma con las propiedades.
  • Un conjunto de usuarios y categorías de cliente.
  • Un proceso de liquidación.
  • Un conjunto de proveedores. Por ejemplo, en Córdoba un proveedor es EPEC y en AMBA dos proveedores son EDENOR y EDESUR.

Proceso de agregar nueva jurisdicción en la plataforma

1- Crear Jurisdicción

El primer paso consiste en crear la jurisdicción en plataforma > jurisdicciones. Hacer click en el ícono +:

Ingresar los datos solicitados por la plataforma:

2- Crear usuarios y categorías de clientes

Electricidad

Crear Usuarios de Potencia

Para crear los usuarios de potencia ir a plataforma > usuarios de potencia.

Ingresar los datos solicitados por la plataforma sobre el usuario de potencia:

Una vez creado el usuario de potencia, se deben crear sus categorías. Ingrese los datos solicitados:

Sobre algunos campos de categoría:

  • Cargo fijo diario: Si se encuentra habilitada está opción, cuando se realice la liquidación de una factura que tenga esta categoría, el cargo fijo depende de la cantidad de días liquidados. En caso contrario, es un valor fijo.
  • Cuota de consumo Escalonada: Si se encuentra habilitada está opción, cuando se realice la liquidación de una factura que tenga esta categoría, el costo de energía será definido por valores escalonados. Por ejemplo, primeros x kWh consumidos tendrá un costo por kWh. A partir de x kWh tendrá otro costo. Estos valores podrán ser cargados en el tarifario.
  • Cargo Fijo Es Escalonado: Esta opción solo se muestra si la Cuota de Consumo Escalonada esta habilitada. Si se encuentra habilitada está opción, cuando se se cargue el tarifario el cargo fijo es solicitado dentro de las cuotas de consumo escalonadas. En caso contrario, el cargo fijo se pide a nivel de categoría de consumo.
Crear Usuarios de Consumo y categorías de consumo

Para crear los usuarios de potencia ir a plataforma > usuarios de consumo de electricidad. Hacer click en el ícono +:

Ingresar los datos solicitados por la plataforma sobre el usuario de consumo:

Una vez creado el usuario de consumo, se deben crear sus categorías de consumo. Ingrese los datos solicitados:

Sobre algunos campos de categoría:

  • Cargo fijo diario: Si se encuentra habilitada está opción, cuando se realice la liquidación de una factura que tenga esta categoría, el cargo fijo depende de la cantidad de días liquidados. En caso contrario, es un valor fijo.
  • Cuota de consumo Escalonada: Si se encuentra habilitada está opción, cuando se realice la liquidación de una factura que tenga esta categoría, el costo de energía será definido por valores escalonados. Por ejemplo, primeros x kWh consumidos tendrá un costo por kWh. A partir de x kWh tendrá otro costo. Estos valores podrán ser cargados en el tarifario.
  • Cargo Fijo Es Escalonado: Esta opción solo se muestra si la Cuota de Consumo Escalonada esta habilitada. Si se encuentra habilitada está opción, cuando se se cargue el tarifario el cargo fijo es solicitado dentro de las cuotas de consumo escalonadas. En caso contrario, el cargo fijo se pide a nivel de categoría de consumo.

Gas

Para crear los usuarios de potencia ir a plataforma > usuarios de consumo de gas. Hacer click en el ícono +:

Ingresar los datos solicitados por la plataforma:

Una vez creado el usuario de consumo, se deben crear sus categorías de consumo. Para eso, hacer click en el botón editar del usuario de consumo correspondiente y hacer click en el botón + de categorías e ingresar los datos solicitados:

Sobre algunos campos:

  • El cargo por gas retenido aplica con porcentaje: Si se encuentra habilitada está opción, el cargo por gas retenido debe ser expresado en porcentajes en el tarifario.
  • Cuota de consumo Escalonada: Si se encuentra habilitada está opción, cuando se realice la liquidación de una factura que tenga esta categoría, el costo de energía será definido por valores escalonados. Por ejemplo, primeros x kWh consumidos tendrá un costo por kWh. A partir de x kWh tendrá otro costo. Estos valores podrán ser cargados en el tarifario.

Agua

PENDIENTE DE IMPLEMENTAR

3- Crear Propiedades

Las propiedades permiten que cada jurisdicción tenga su propio vocabulario dentro de la plataforma. De estar forma, los clientes pueden entender la información que se les brinda ya que se usa la misma terminología que su proveedor, y el equipo de Optim puede utilizar la plataforma sin tener que aprender un vocabulario propio.

El listado de todas las propiedades de la plataforma se encuentran en plataforma > propiedades del sistema:

Para configurar las propiedades de una jurisdicción, ir a plataforma > jurisdicciones, hacer click en el botón de ver:

Hacer click en el ícono + de Crear Propiedad para potencia electricidad, Crear Propiedad para consumo electricidad o Crear Propiedad para consumo gas según corresponda:

Ingresar los datos requeridos por la plataforma:

IMPORTANTE: las propiedades son configuraciones críticas de la plataforma. Los tarifarios se arman de acuerdo a las propiedades, así como el proceso de liquidación y visualización de información dependen de las propiedades.

4- Solicitar implementación de liquidación a programador/a

El proceso de liquidación requiere del desarrollo de la funcionalidad por parte de un/a programador/a. Se deberá pasar al programador/a la especificación de la liquidación de la jurisdicción para las diferentes categorías de clientes. En lo posible, se debe acompañar la especificación de liquidación con ejemplos de facturas, para que el desarrollador pueda usar como casos de prueba y validar que la liquidación se realizó correctamente.

Información para programador/a

Dentro del proyecto de la plataforma, la liquidación de una jurisdicción debe implementar una ELiquidacionPotencia si es liquidación de potencia o ELiquidacionConsumo si es una liquidación de consumo. Dicho módulo de liquidación se encuentre dentro de '/models/liquidacion' a partir de la raíz del proyecto.

Para entender como integrar una nueva liquidación veremos el ejemplo de la liquidación de potencia de AMBA.

La liquidación de potencia de AMBA es una implementación de ELiquidacionPotencia llamada ELiquidacionPotenciaAMBAGBA:

La liquidación de AMBA debe implementar el proceso de cargo de potencia, multa por exceso fi y recargo por diferencia de potencia contratado con potencia registrada. Por ejemplo, la implementación del proceso de cargo de potencia es la siguiente al día de la fecha (13/04/2022):

    public function getCargoPotencia($is_show_info_internal = true)
    {
        //no existe diferencia entre potencia pico y no pico
        if( $this->is_show_info && $is_show_info_internal ) echo "Precio por " . $this->jurisdiccion->labelPotenciaContratadaPico(CATEGORIA_POTENCIA, $this->categoria) . ": "  . $this->getCargoPotenciacontratadaPico() . " $/kW<br>";
        if( $this->is_show_info && $is_show_info_internal) echo "Precio por " . $this->jurisdiccion->labelPotenciaRegistradaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->getCargoPotenciaregistradaPico() . " $/kW<br><br>";

        array_push($this->steps_liquidacion, "Precio por " . $this->jurisdiccion->labelPotenciaContratadaPico(CATEGORIA_POTENCIA, $this->categoria) . ": "  . $this->getCargoPotenciacontratadaPico() . " $/kW<br>");
        array_push($this->steps_liquidacion, "Precio por " . $this->jurisdiccion->labelPotenciaRegistradaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->getCargoPotenciaregistradaPico() . " $/kW<br><br>");

        if( $this->is_show_info && $is_show_info_internal) echo $this->jurisdiccion->labelPotenciaContratadaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_contratada_pico. "kW<br>";
        if( $this->is_show_info && $is_show_info_internal) echo $this->jurisdiccion->labelPotenciaRegistradaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_registrada_pico . "kW<br><br>";

        array_push($this->steps_liquidacion, $this->jurisdiccion->labelPotenciaContratadaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_contratada_pico. "kW<br>");
        array_push($this->steps_liquidacion, $this->jurisdiccion->labelPotenciaRegistradaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_registrada_pico . "kW<br><br>");

        if( $this->is_show_info && $is_show_info_internal)  echo $this->jurisdiccion->labelCargoPotenciaContratadaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_contratada_pico . "kW x " .$this->getCargoPotenciacontratadaPico() . " $/kW= $" . $this->getCargoPotenciaContratadaPico() .  "<br>";
        if( $this->is_show_info && $is_show_info_internal)  echo $this->jurisdiccion->labelCargoPotenciaRegistradaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_registrada_pico . "kW x " .$this->getCargoPotenciaregistradaPico() . " $/kW= $" . $this->getCargoPotenciaRegistradaPico() .  "<br><br>";

        array_push($this->steps_liquidacion, $this->jurisdiccion->labelCargoPotenciaContratadaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_contratada_pico . "kW x " .$this->getCargoPotenciacontratadaPico() . " $/kW= $" . $this->getCargoPotenciaContratadaPico() .  "<br>");
        array_push($this->steps_liquidacion, $this->jurisdiccion->labelCargoPotenciaRegistradaPico(CATEGORIA_POTENCIA, $this->categoria) . ": " . $this->potencia_registrada_pico . "kW x " .$this->getCargoPotenciaregistradaPico() . " $/kW= $" . $this->getCargoPotenciaRegistradaPico() .  "<br><br>");

        $result = $this->getCargoPotenciaContratadaPico() + $this->getCargoPotenciaRegistradaPico();

        if( $this->is_show_info && $is_show_info_internal) echo "Cargo por potencia:  <b>$" . $result .  "</b><br>";
        array_push($this->steps_liquidacion, "Cargo por potencia:  <b>$" . $result .  "</b><br>");

        return $result;
    }

El parámetro is_show_info_internal es por si querés que el proceso explique los pasos de liquidación. De esta manera es usado, por ejemplo, en la vista de liquidación donde explica los pasos. Es false en todos aquellos casos que solo necesitamos liquidar.

Cuando is_show_info_internal es true, observamos que se realizan dos acciones, una es que imprime con el echo y otra es que lo devuelve en un array llamado steps_liquidacion. Esto es por una cuestión de compatibilidad. El frontend de la plataforma inicialmente se encontraba integrado dentro del framework Yii, y por lo tanto el echo se usaba para devolver los pasos del proceso de liquidación en la vista html que devuelve Yii. Sin embargo, en el año 2021 se tomo la decisión de empezar a desacoplar el frontend del backend, usando el framework React.js. Para estos casos se usa el array steps_liquidacion, que el backend devuelve ante una request del frontend.

En la clase ELiquidacionBuilderPotencia se debe integrar la implementación de la liquidación de acuerdo al código de la jurisdicción:

    public function createELiquidacionFromFactura($area, $factura, $categoria, $nombre_categoria, $is_show_info = false)
    {
        if ($area === "AMBA_GBA") {
            $this->eliquidacion = new ELiquidacionPotenciaAMBAGBA($nombre_categoria, $is_show_info);
        } else if ($area === "BS_AS") {
            $this->eliquidacion = new ELiquidacionPotenciaBSAS($nombre_categoria, $is_show_info);
        } else if ($area === "CBA") {
            $this->eliquidacion = new ELiquidacionPotenciaCBA($nombre_categoria, $is_show_info);
        } else if ($area === "SF") {
            $this->eliquidacion = new ELiquidacionPotenciaSF($nombre_categoria, $is_show_info);
        } else if ($area === "NQ") {
            $this->eliquidacion = new ELiquidacionPotenciaNQ($nombre_categoria, $is_show_info);
        } else if ($area === "SA") {
            $this->eliquidacion = new ELiquidacionPotenciaSA($nombre_categoria, $is_show_info);
        } else {
            return null;
        }

        ...
    }

Algunos pasos en el proceso de liquidación se habilitaron o no de acuerdo a las propiedades definidas en la plataforma para la jurisdicción.

Además, una vez terminado el proceso de liquidación, se debe habilitar el campo liquidacion_lista de la tabla jurisdiccion.