<?php

namespace App\Custom;

use App\Custom\SQLConnection;
use Illuminate\Support\Facades\Session;
use App\Http\Controllers\ApiControllerV1;

use App\Models\Mailer;

use DateTime;
use DateTimeZone;
use stdClass;
/*
use Sunra\PhpSimple\HtmlDomParser; */

class Misc
{

    const KEY = '20335754655';
    // const TYPEENCRYPT = env('TYPEENCRYPT');
    private static function TYPEENCRYPT()
    {
        return env('TYPEENCRYPT');
    }

    /**
     * Summary of safe_b64encode
     * @deprecated
     * @return string
     * @phpstan-ignore-next-line
     */
    private static function safe_b64encode($string)
    {
        $data = base64_encode($string);
        $data = str_replace(array('+', '/', '='), array('-', '_', ''), $data);
        return $data;
    }

    /**
     * Summary of safe_b64decode
     * @deprecated
     * @return bool|string
     * @phpstan-ignore-next-line
     */
    private static function safe_b64decode($string)
    {
        $data = str_replace(array('-', '_'), array('+', '/'), $string);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        return base64_decode($data);
    }
    public static function encrypt($data)
    {
        if ($data == null) {
            return $data;
        }
        $ivSize = openssl_cipher_iv_length(self::TYPEENCRYPT());
        $iv = openssl_random_pseudo_bytes($ivSize);
        $encrypted = openssl_encrypt($data, self::TYPEENCRYPT(), self::KEY, OPENSSL_RAW_DATA, $iv);
        $hmac = hash_hmac('sha256', $encrypted, self::KEY, true);
        $cifrado = base64_encode($iv . $hmac . $encrypted);
        return $cifrado;
    }



    public static function decrypt($data)
    {
        if ($data == null) {
            return $data;
        }
        // DESARROLLO
        //dd($data);
        $c = base64_decode($data);
        //dd($c);
        $ivlen = openssl_cipher_iv_length(self::TYPEENCRYPT());
        //dd($ivlen);
        //
        $iv = substr($c, 0, $ivlen); // CLAVE ALEATORIO GENERADO
        //dd($iv);
        $hmac = substr($c, $ivlen, 32); // HASH
        //dd($hmac);
        $ciphertext_raw = substr($c, $ivlen + 32); // DATOS ENCRIPTADO
        //
        //dd($ciphertext_raw);
        $decrypted = openssl_decrypt($ciphertext_raw, self::TYPEENCRYPT(), self::KEY, OPENSSL_RAW_DATA, $iv);
        //dd($decrypted);
        return trim($decrypted);
    }

    public static function encryptOrg($data)
    {
        if ($data === null) {
            return;
        }
        //
        $ivSize = openssl_cipher_iv_length(self::TYPEENCRYPT());
        $iv = openssl_random_pseudo_bytes($ivSize);
        $encrypted = openssl_encrypt($data, self::TYPEENCRYPT(), pack('H*', self::KEY), OPENSSL_RAW_DATA, $iv);
        $hmac = hash_hmac('sha256', $encrypted, pack('H*', self::KEY), true);
        //$encrypted = strtoupper(implode(null, unpack('H*', $encrypted)));
        return $encrypted;
    }

    public static function decryptOrg($data)
    {
        if ($data == null) {
            return;
        }
        $data = pack('H*', $data);
        $ivSize = openssl_cipher_iv_length(self::TYPEENCRYPT());
        $iv = openssl_random_pseudo_bytes($ivSize);
        $decrypted = openssl_decrypt($data, self::TYPEENCRYPT(), pack('H*', self::KEY), OPENSSL_RAW_DATA, $iv);
        return trim($decrypted);
    }

    /*
  ESTE METODO ESTÁ DEPRECADO
    //Método público que se encarga de encriptar una cadena 
    public static function encrypt($value){ 
      if(!$value){return false;}
      $text = $value;
      $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
      $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
      $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, self::KEY, $text, MCRYPT_MODE_ECB, $iv);
      return trim(self::safe_b64encode($crypttext)); 
    }

    //Método público que se encarga de desencriptar únicamente lo que este encriptado con el método encrypt
    public static function decrypt($value){
      if(!$value){return false;}
      $crypttext = self::safe_b64decode($value); 
      $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
      $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
      $decrypttext = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, self::KEY, $crypttext, MCRYPT_MODE_ECB, $iv);
      return trim($decrypttext);
    }
  */
    //Método para agilizar el envio de emails desde Fidelitas
    public static function enviarMail($view = '', $to = '', $content = '', $subject = "Fidelitas", $attach = '')
    {
        Mailer::from("no-reply@fidelitas.com.ar");
        Mailer::to($to);
        if ($attach) {
            //Mailer::attachFile($attach,'aumento_precio_fidelitas_2017.pdf');
            Mailer::attachFile($attach, $attach);
        }
        $content = \View::make($view)->with('content', $content)->render();
        Mailer::text($content, $subject);
        return Mailer::send();
    }



    public static function enviarMailLED($view = '', $from = '', $to = '', $bcc = '', $replyto = '', $content = '', $subject = "Fidelitas", $attach = '')
    {
        Mailer::from($from);
        Mailer::to($to);
        Mailer::bcc($bcc);
        Mailer::replyto($replyto);
        $content = \View::make($view)->with('content', $content)->render();
        Mailer::text($content, $subject);
        return Mailer::send();
    }


    public static function parsearBusquedaPadron($campo)
    {
        $campo = self::limpiarString($campo);
        if (is_numeric(str_replace(' ', '', ($campo)))) {
            return "\"" . str_replace(' ', '', $campo) . "\"";
        }
        $exploded = explode(" ", $campo);
        $full_search = "";
        if (sizeof($exploded) == 1 && strlen($campo) > 2) {
            return "\"" . $campo . "*\"";
        } elseif (((sizeof($exploded) == 2) && ((strlen($exploded[0]) + strlen($exploded[1])) > 2)) || (sizeof($exploded) > 2)) {
            foreach ($exploded as $key => $part) {
                if ($part != '') {
                    if (strlen($part) <= 1) {
                        continue;
                    }
                    $part = (strlen($part > 1)) ? "\"*" . $part . "*\"" : "\"" . $part . "*\"";
                    //if($key == 0) {
                    if ($full_search == "") {
                        $full_search = $part;
                    } else {
                        $full_search .= " NEAR " . $part;
                    }
                }
            }
            return $full_search;
        }
        return $full_search;
    }

    public static function parsearBusquedaEdictos($campo)
    {
        $exploded = explode(" ", $campo);
        $full_search = "";
        if (sizeof($exploded) <= 1) {
            $full_search = $campo;
        } else {
            foreach ($exploded as $key => $part) {
                if ($key == 0) {
                    $full_search = $part;
                    if ($exploded[1] == "") {
                        $full_search = $campo;
                        break;
                    }
                } else {
                    if ($part != '') {
                        $full_search .= " NEAR " . $part;
                    }
                }
            }
        }
        return $full_search;
    }

    public static function strpos_arr($haystack, $needle)
    {
        if (!is_array($needle))
            $needle = array($needle);
        foreach ($needle as $what) {
            if (($pos = strpos($haystack, $what)) !== false)
                return $what;
        }
        return false;
    }

    public static function omitirPalabras($razon_social)
    {
        $omitidos = SQLConnection::obtenerOmitidos();
        foreach ($omitidos as $omitido) {
            foreach ($omitido as $valor) {
                if (!empty($valor)) {
                    $razon_social = preg_replace("/$valor\W/", "", $razon_social);
                    $razon_social = trim($razon_social, ' ');
                }
            }
        }
        return $razon_social;
    }

    public static function diccionarioSinonimosTEST($razon_social)
    {
        $razon_social_segmentada = [];
        $sinonimos = [];
        $palabras_agregar = [];
        $array_palabras_con_sinonimos = [];
        $razones_sociales_con_sinonimos = '';
        //$omitidos                       = SQLConnection::obtenerOmitidos();
        $omitidos = SQLConnection::backendStoreProcedure('obtener_omitidos_sinonimos', array());

        // dd($omitidos);
        foreach ($omitidos as $omitido) {

            foreach ($omitido as $valor) {
                //print_r("\n". $valor ." - ");
                if (!empty($valor)) {
                    //$valor = str_ireplace(".", "\\.", $valor);
                    //print_r($valor);
                    // $razon_social = preg_replace("/\^$valor/","", $razon_social);
                    // print_r($razon_social);

                    // $razon_social = preg_replace(" "."/$valor\$/","", $razon_social);
                    // print_r($razon_social);
                    $valor1 = $valor . " ";
                    $razon_social = preg_replace('/^' . preg_quote($valor1, '/') . '/', '', $razon_social);
                    $valor1 = " " . $valor;
                    $razon_social = preg_replace('/' . preg_quote($valor1, '/') . '$/', '', $razon_social);
                    $valor1 = " " . $valor . " ";
                    $razon_social = str_ireplace($valor1, " ", $razon_social);
                    //print_r($razon_social);
                }
            }
        }
        //die();
        $razon_social = array_map('trim', $razon_social);

        foreach ($razon_social as $key => $value) {
            $value = rtrim($value);
            if (substr($value, -2, 1) == " ") // si termina con solo una letra elimina esa letra del final
            {
                $value = substr($value, 0, -1);
            }
            $value = rtrim($value);
            $razon_social[$key] = "\"" . $value . "\"";
        }

        return $razon_social;
    }

    public static function diccionarioSinonimos2020($razon_social)
    {
        $razon_social_segmentada = [];
        $sinonimos = [];
        $palabras_agregar = [];
        $array_palabras_con_sinonimos = [];
        $razones_sociales_con_sinonimos = '';
        $omitidos = SQLConnection::backendStoreProcedure('obtener_omitidos_sinonimos', array());
        foreach ($omitidos as $omitido) {

            foreach ($omitido as $valor) {
                if (!empty($valor)) {
                    //$razon_social = preg_replace("/$valor\z/","", $razon_social);
                    $valor1 = $valor . " ";
                    $razon_social = preg_replace('/^' . preg_quote($valor1, '/') . '/', '', $razon_social);
                    $valor1 = " " . $valor;
                    $razon_social = preg_replace('/' . preg_quote($valor1, '/') . '$/', '', $razon_social);
                    $valor1 = " " . $valor . " ";
                    $razon_social = str_ireplace($valor1, " ", $razon_social);

                    $razon_social = rtrim($razon_social);
                }
            }
        }
        $razon_social = rtrim($razon_social);
        if (substr($razon_social, -2, 1) == " ") // si termina con solo una letra elimina esa letra del final
        {
            $razon_social = substr($razon_social, 0, -1);
        }
        $razon_social = rtrim($razon_social);

        return "\"" . $razon_social . "\"";
    }

    public static function diccionarioSinonimos($razon_social)
    {
        $razon_social_segmentada = [];
        $sinonimos = [];
        $palabras_agregar = [];
        $array_palabras_con_sinonimos = [];
        $razones_sociales_con_sinonimos = '';
        $omitidos = SQLConnection::obtenerOmitidos();
        foreach ($omitidos as $omitido) {

            foreach ($omitido as $valor) {
                if (!empty($valor)) {
                    //$razon_social = preg_replace("/$valor\z/","", $razon_social);
                    $valor1 = $valor . " ";
                    $razon_social = preg_replace('/^' . preg_quote($valor1, '/') . '/', '', $razon_social);
                    $valor1 = " " . $valor;
                    $razon_social = preg_replace('/' . preg_quote($valor1, '/') . '$/', '', $razon_social);
                    $valor1 = " " . $valor . " ";
                    $razon_social = str_ireplace($valor1, " ", $razon_social);

                    $razon_social = rtrim($razon_social);
                }
            }
        }
        $razon_social = rtrim($razon_social);
        if (substr($razon_social, -2, 1) == " ") // si termina con solo una letra elimina esa letra del final
        {
            $razon_social = substr($razon_social, 0, -1);
        }
        $razon_social = rtrim($razon_social);

        return "\"" . $razon_social . "\"";
        /* //return $razon_social;
        $palabras = explode(' ', $razon_social);

        // Si existen palabras mayores  1 letra...
        foreach ($palabras as $key => $palabra) {
            if (strlen($palabra) > 1) {
                $razon_social_segmentada[] = $palabra;
            }
        }

        // Si existen palabras o sinonimos en el array...
        if (sizeof($razon_social_segmentada) == 1) {
            return "\"" . $razon_social_segmentada[0] . "\"";
        }

        // Busco sinonimos de acuerdo a las palabras segmentadas de la razon social...
        foreach ($sinonimos as $sinonimo) {
            $resp = SQLConnection::obtenerSinonimos($sinonimo);
            if ($resp) {
                $palabras_agregar[] = $resp;
            }
        }

        // Si no existen sinonimos...
        if (!$palabras_agregar) {
            // return "\"".implode(" ",$sinonimos)."\"";
            return false;
        }

        $posicion_reemplazo = null;
        $textos_semejantes = array();
        $nuevos_textos = "";

        //Buscando posicion a reemplazar
        foreach ($palabras_agregar as $cantidad_sinonimo => $lote) {
            foreach ($lote as $palabra) {
                if (!empty($palabra)) {
                    foreach ($sinonimos as $key => $segmentado) {
                        if ($palabra == $segmentado) {
                            $posicion_reemplazo[$cantidad_sinonimo] = $key;
                        }
                    }
                }
            }
        }

        // Estructurando las semejanzas
        foreach ($palabras_agregar as $cantidad_sinonimo => $lote) {
            foreach ($lote as $key_sin => $palabra) {
                if (!empty($palabra)) {
                    foreach ($sinonimos as $key => $segmentado) {
                        if (isset($posicion_reemplazo[$cantidad_sinonimo]) && ($posicion_reemplazo[$cantidad_sinonimo] == $key)) {
                            $textos_semejantes[$cantidad_sinonimo][$key_sin][$key] = $palabra;
                        } else {
                            $textos_semejantes[$cantidad_sinonimo][$key_sin][$key] = $segmentado;
                        }
                    }
                }
            }
        }

        $cantidad_palabras_razon_social = count($sinonimos) - 1;

        // ultima llave general
        $nuevo_textos_general = $textos_semejantes;
        end($nuevo_textos_general);
        $ultima_llave_textos_general = key($nuevo_textos_general);

        // Concatenando
        foreach ($textos_semejantes as $key => $sinom_textos) {
            foreach ($sinom_textos as $key2 => $semejanzas) {
                // ultima llave semejantes
                $nuevo_textos_semejantes = $sinom_textos;
                end($nuevo_textos_semejantes);
                $ultima_llave_textos_semejantes = key($nuevo_textos_semejantes);

                foreach ($semejanzas as $key3 => $valor) {
                    // primera llave valor
                    $primer_llave_textos_valor = key($semejanzas);
                    if ($primer_llave_textos_valor == $key3) {
                        $nuevos_textos .= "\"";
                    }

                    // ultima llave valor
                    $nuevo_textos_valor = $semejanzas;
                    end($nuevo_textos_valor);
                    $ultima_llave_textos_valor = key($nuevo_textos_valor);

                    // Si esta recorriendo la cantidad de palabras de la razon social
                    if ($cantidad_palabras_razon_social != $key3) {
                        $nuevos_textos .= $valor . ' ';
                    } else {
                        // Agregando mas semejanzas
                        if (($ultima_llave_textos_general == $key) && ($ultima_llave_textos_semejantes == $key2) && ($ultima_llave_textos_valor == $key3)) {
                            $nuevos_textos .= $valor . "\"";
                        } else {
                            $nuevos_textos .= $valor . "\"" . ' or ';
                        }
                    }
                }
            }
        }

        if (strlen($nuevos_textos) >= 8000) {
            $nuevos_textos = self::sinonimTruncate($nuevos_textos, 8000);
        }

        return $nuevos_textos; */
    }

    public static function sinonimTruncate($string, $chars_count)
    {
        $text = substr($string, 0, $chars_count);
        $text = substr($text, 0, strrpos($text, 'or'));
        return $text;
    }
    /**
     * Reemplaza todos los acentos por sus equivalentes sin ellos
     * string saneada
     * @param string
     * @return string|array
     *  
     */
    /* public static function replace_specials_characters($s) {
      //$s = mb_convert_encoding($s, 'UTF-8','');
      $s = preg_replace("/á|à|â|ã|ª/","a",$s);
      $s = preg_replace("/Á|À|Â|Ã/","A",$s);
      $s = preg_replace("/é|è|ê/","e",$s);
      $s = preg_replace("/É|È|Ê/","E",$s);
      $s = preg_replace("/í|ì|î/","i",$s);
      $s = preg_replace("/Í|Ì|Î/","I",$s);
      $s = preg_replace("/ó|ò|ô|õ|º/","o",$s);
      $s = preg_replace("/Ó|Ò|Ô|Õ/","O",$s);
      $s = preg_replace("/ú|ù|û/","u",$s);
      $s = preg_replace("/Ú|Ù|Û/","U",$s);
      //$s = str_replace(" ","_",$s);
      $s = str_replace("ñ","n",$s);
      $s = str_replace("Ñ","N",$s);
      
      //$s = preg_replace('/[^a-zA-Z0-9_.-]/', '', $s);
      return $s;
    } */
   
    public static function sanear_string($string)
    {

        $string = trim($string);
        $string = str_replace(
            array('á', 'à', 'ä', 'â', 'ª', 'Á', 'À', 'Â', 'Ä'),
            array('a', 'a', 'a', 'a', 'a', 'A', 'A', 'A', 'A'),
            $string
        );

        $string = str_replace(
            array('é', 'è', 'ë', 'ê', 'É', 'È', 'Ê', 'Ë'),
            array('e', 'e', 'e', 'e', 'E', 'E', 'E', 'E'),
            $string
        );

        $string = str_replace(
            array('í', 'ì', 'ï', 'î', 'Í', 'Ì', 'Ï', 'Î'),
            array('i', 'i', 'i', 'i', 'I', 'I', 'I', 'I'),
            $string
        );

        $string = str_replace(
            array('ó', 'ò', 'ö', 'ô', 'Ó', 'Ò', 'Ö', 'Ô'),
            array('o', 'o', 'o', 'o', 'O', 'O', 'O', 'O'),
            $string
        );

        $string = str_replace(
            array('ú', 'ù', 'ü', 'û', 'Ú', 'Ù', 'Û', 'Ü'),
            array('u', 'u', 'u', 'u', 'U', 'U', 'U', 'U'),
            $string
        );

        $string = str_replace(
            array('ñ', 'Ñ', 'ç', 'Ç'),
            array('n', 'N', 'c', 'C', ),
            $string
        );

        $string = str_replace("\r", '', $string);
        return $string;
    }

    public static function ResaltarResultadosEdictosHomonimosPF26082024($edictos, $razon_social)
    {
        $rs_exp = explode(' ', $razon_social[0]);
        $p1 = $rs_exp[0];
        unset($rs_exp[0]);
        $edicto_aux = [];
        foreach ($edictos as $key => $edicto) {
            $texto_exp = explode(' ', strtoupper(($edicto->contenido_archivo)));
            foreach ($texto_exp as $key => $value) {
                $value = str_replace(',', '', self::limpiarString($value));
                $encontrado = false;
                if ($value == $p1) {
                    if (($key != 0) && array_search($texto_exp[$key - 1], $rs_exp) !== false) {
                        $encontrado = true;
                        $texto_exp[$key - 1] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key - 1] . "</span>";
                    }

                    if (($key > 1) && array_search($texto_exp[$key - 2], $rs_exp) !== false) {
                        $texto_exp[$key - 2] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key - 2] . "</span>";
                        $encontrado = true;
                    }

                    if (isset($texto_exp[$key + 3])) {
                        $texto_exp[$key + 3] = str_replace(',', '', $texto_exp[$key + 3]);
                        if ((array_search($texto_exp[$key + 3], $rs_exp) !== false)) {
                            $texto_exp[$key + 3] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key + 3] . "</span>";
                            $encontrado = true;
                        }
                    }

                    if (isset($texto_exp[$key + 1])) {
                        if (($key < sizeof($texto_exp)) && (array_search($texto_exp[$key + 1], $rs_exp) !== false)) {
                            $texto_exp[$key + 1] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key + 1] . "</span>";
                            $encontrado = true;
                        }
                    }
                    if (isset($texto_exp[$key + 2])) {
                        if (($key < (sizeof($texto_exp) - 1)) && (array_search($texto_exp[$key + 2], $rs_exp) !== false)) {
                            $texto_exp[$key + 2] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key + 2] . "</span>";
                            $encontrado = true;
                        }
                    }

                    if ($encontrado == true) {
                        $texto_exp[$key] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key] . "</span>";
                    }
                }
            }//endforeach TEXTO_EXP

            $edicto->contenido_archivo = implode(' ', $texto_exp);
            $edicto_aux[] = $edicto;
        }//endforeach EDICTOS
        return $edicto_aux;
    }


    public static function ResaltarResultadosEdictosHomonimosPF($edictos, $razon_social, $esCuitDni = null)
    {
        if ($esCuitDni == '1') {
            $rs_exp[0] = $razon_social;
            $p1 = null;
        } else {
            $rs_exp = explode(' ', $razon_social[0]);
            $p1 = $rs_exp[0];
            unset($rs_exp[0]);
        }
        $edicto_aux = [];
        foreach ($edictos as $key => $edicto) {

            if (isset($edicto->contenido_archivo)) {
                $texto = strtoupper($edicto->contenido_archivo);
            } else {
                $texto = strtoupper($edicto->texto);
            }

            $texto_exp = explode(' ', $texto);
            /*
                  var_dump('------------------------------------');  
                  var_dump($texto);  
            */

            foreach ($texto_exp as $key => $value) {
                if (strlen($value) <= 1) {
                    continue;
                }

                $value = str_replace(',', '', self::limpiarString($value));
                $encontrado = false;
                if ($value == $p1) {
                    if (($key != 0) && array_search($texto_exp[$key - 1], $rs_exp) !== false) {
                        $encontrado = true;
                        $texto_exp[$key - 1] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key - 1] . "</span>";
                    }

                    if (($key > 1) && array_search($texto_exp[$key - 2], $rs_exp) !== false) {
                        $texto_exp[$key - 2] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key - 2] . "</span>";
                        $encontrado = true;
                    }

                    if (isset($texto_exp[$key + 3])) {
                        $texto_exp[$key + 3] = str_replace(',', '', $texto_exp[$key + 3]);
                        if ((array_search($texto_exp[$key + 3], $rs_exp) !== false)) {
                            $texto_exp[$key + 3] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key + 3] . "</span>";
                            $encontrado = true;
                        }
                    }

                    if (isset($texto_exp[$key + 1])) {
                        if (($key < sizeof($texto_exp)) && (array_search($texto_exp[$key + 1], $rs_exp) !== false)) {
                            $texto_exp[$key + 1] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key + 1] . "</span>";
                            $encontrado = true;
                        }
                    }
                    if (isset($texto_exp[$key + 2])) {
                        if (($key < (sizeof($texto_exp) - 1)) && (array_search($texto_exp[$key + 2], $rs_exp) !== false)) {
                            $texto_exp[$key + 2] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key + 2] . "</span>";
                            $encontrado = true;
                        }
                    }

                    if ($encontrado == true) {
                        $texto_exp[$key] = "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $texto_exp[$key] . "</span>";
                    }
                }
            }//endforeach TEXTO_EXP

            $texto = implode(' ', $texto_exp);

            if (isset($edicto->contenido_archivo)) {
                $edicto->contenido_archivo = $texto;
            } else {
                $edicto->texto = $texto;
            }


            $edicto_aux[] = $edicto;
        }//endforeach EDICTOS
        return $edicto_aux;
    }

    public static function ResaltarResultadosEdictosHomonimosPF_test($edictos, $razon_social)
    {
        foreach ($edictos as $key => $edicto) {
            foreach ($razon_social as $rs) {
                $edictos[$key]->contenido_archivo = str_ireplace($rs, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $rs . "</span>", self::sanear_string($edicto->contenido_archivo));
            }
        }
        return $edictos;
    }

    public static function ResaltarResultadosEdictosHomonimosPJ($edictos, $razon_social, $sinonimos)
    {
        foreach ($edictos as $key => $edicto) {
            if (isset($razon_social)) {
                $edictos[$key]->contenido_archivo = str_ireplace($razon_social, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $razon_social . "</span>", $edicto->contenido_archivo);
            }

            if (isset($sinonimos)) {
                $edictos[$key]->contenido_archivo = str_ireplace($sinonimos, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $sinonimos . "</span>", $edicto->contenido_archivo);
            }
        }
        return $edictos;
    }
    //Resalta edictos cuando encuentra nombres posibles relacionados a un mismo CUIT (TEST)
    public static function ResaltarResultadosEdictosHomonimosPJ_TEST($edictos, $razon_social, $sinonimos)
    {

        foreach ($edictos as $key => $edicto) {
            if (isset($razon_social)) {
                $edictos[$key]->contenido_archivo = str_ireplace($razon_social, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $razon_social . "</span>", self::sanear_string($edicto->contenido_archivo));
            }

            if (isset($sinonimos)) {
                foreach ($sinonimos as $value) {
                    $value = str_replace('"', '', $value);
                    $edictos[$key]->contenido_archivo = str_ireplace($value, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $value . "</span>", self::sanear_string($edicto->contenido_archivo));
                }
            }

        }
        return $edictos;
    }

    public static function ResaltarResultadosEdictosHomonimosNombresAnt($edictos, $sinonimos)
    {
        //dd($sinonimos);
        foreach ($edictos as $key => $edicto) {
            if (isset($sinonimos)) {
                foreach ($sinonimos as $value) {
                    $value = str_replace('"', '', $value);
                    $edictos[$key]->contenido_archivo = str_ireplace($value, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $value . "</span>", self::sanear_string($edicto->contenido_archivo));
                }
            }

        }
        return $edictos;
    }

    public static function ResaltarResultadosEdictos($edictos, $razon_social, $sinonimos)
    {
        foreach ($edictos as $key => $edicto) {
            if (!empty($sinonimos)) {
                foreach ($sinonimos as $sinonimo) {
                    $edictos[$key]->texto = str_ireplace($sinonimo, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $sinonimo . "</span>", self::sanear_string($edicto->texto));
                }
            }

            if (!empty($razon_social)) {
                $edictos[$key]->texto = str_ireplace($razon_social, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $razon_social . "</span>", self::sanear_string($edicto->texto));
            }
        }
        return $edictos;
    }

    public static function ResaltarResultadosRemates($remates, $string)
    {
        foreach ($remates as $key => $remate) {
            $remates[$key]->contenido = str_ireplace($string, "<span class='fw600' style='font-size:14px;background-color:yellow;'>" . $string . "</span>", $remate->contenido);
        }
        return $remates;
    }

    //Método que reemplazar caracteres a saltos de linea
    public static function ReemplazarCaracteres($array = array())
    {
        return str_replace(array("\r\n", "\n", "\\r", "\\n"), '<br>', $array);
    }

    public static function obtenerColoresEnv()
    {
        $env = [];

        foreach ($_ENV as $key => $value) {
            if (strpos($key, 'COLOR_') === 0) {
                $env[$key] = $value;
            }
        }
        return $env;
    }

    /* Método que sirve interpretar valores de la base de datos y convertirlos a lo que se requiera */
    public static function interpretarDB($cadena)
    {
        $cadena = strtoupper($cadena);
        if ($cadena == 'N' || $cadena == 'NI') {
            return 'NO INSCRIPTO';
        } else if ($cadena == 'AC' || $cadena == 'S') {
            return 'ACTIVO';
        } else if ($cadena == 'EX') {
            return 'EXENTO';
        } else if ($cadena == 'NA') {
            return 'NO ALCANZADO';
        } else if ($cadena == 'XN') {
            return 'EXENTO NO ALCANZADO';
        } else if ($cadena == 'AN') {
            return 'ACTIVO NO ALCANZADO';
        } else if ($cadena == 'NC') {
            return 'NO CORRESPONDE';
        } else {
            return 'NO INFORMA';
        }

    }

    public static function add($var1, $var2 = null, $var3 = null)
    {
        return $var1 + $var2 + $var3;
    }

    public static function truncate($text, $chars = 250)
    {
        $text = $text . " ";
        $text = substr($text, 0, $chars);
        $text = substr($text, 0, strrpos($text, ' '));
        $text = $text . "...";
        return $text;
    }

    public static function procesarBalance($array)
    {
        $año = '';
        $balance = [];
        foreach ($array as $key => $value) {
            if ($año != '' && $value->fecha_balance != '') {
                $array_año = explode('/', $value->fecha_balance)[2];
                /*$año = $año - 1;*/
                if ($array_año != $año) {
                    $año = $año - 1;
                }
                /*if($array_año != $año){*/
                if ($array_año < $año) {
                    krsort($balance);
                    return $balance;
                } else {
                    $balance[$key] = $value;
                    //unset($balance[$key]);
                }
            }
            if ($key == 0) {
                if ($value->fecha_balance) {
                    $año = explode('/', $value->fecha_balance)[2];
                    $balance[$key] = $value;
                }
            }
        }
        krsort($balance);

        return $balance;
    }
    /*
      public static function obtenerConsumos($productos,$id_producto){
        //echo "<pre>";print_r(\Session::all());
        if(isset($productos[$id_producto])){
         $producto = $productos[$id_producto];
         
            $resp = ['error' => 0,'mensaje' => 'ok'];
        
            //caso de pack full, no hay limite
          if( ($producto->usuario_limite_consumo == 0 && $producto->cliente_limite_consumo == 0) || 
            //caso de pack con limite ver si usuario puede consumir.
            ( ($producto->usuario_consumido < $producto->usuario_limite_consumo || $producto->usuario_limite_consumo == 0) &&
              $producto->cliente_consumido < ($producto->cliente_limite_consumo))
            )
          {
            $resp = ['error' => 0,'mensaje' => 'ok'];
            //Si supera el consumo del cliente y bloquea consumo.
          }else if( $producto->usuario_consumido >=  $producto->usuario_limite_consumo  &&  $producto->cliente_bloquear_consumo == 1 ){
            $resp = ['error' => 1,'mensaje' =>'Su usuario Alcanzó el límite de consumos'];
            //Si supera el consumo del cliente y no bloquea consumo.
          }else if($producto->usuario_consumido >=  $producto->usuario_limite_consumo  &&  $producto->cliente_bloquear_consumo == 0){
            //Si el consumo es mayor al del cliente y supera el consumo del cliente y no bloquea consumo..
            if($producto->usuario_consumido >= ($producto->cliente_limite_consumo) ){
            $resp = ['error' => 1,'mensaje' =>'Su usuario Alcanzó el límite de consumos'];
            }else{
            //Si el consumo es menor al del cliente y supera el consumo del usuario y no bloquea consumo..
            $resp = ['error' => 0,'mensaje' =>'Su usuario Alcanzó el límite de consumos'];
            }
          }
          
         return $resp;
        }
      }
    */
    /* lo cambiamos el 05/10/2020 por el de abajo 
      public static function obtenerConsumos($productos,$id_producto){
       // echo "<pre>";print_r(\Session::all());
        if(isset($productos[$id_producto]))
      {
            $producto = $productos[$id_producto]; 
          // consumos ilimitado --> deja entrar siempre
          if($producto->usuario_limite_consumo == 0 && $producto->cliente_limite_consumo == 0) 
          {
            $resp = ['error' => 0,'mensaje' => 'ok'];
            return $resp;
          }
          // no bloquear consumos --> deja entrar siempre
          if ($producto->cliente_bloquear_consumo == 0) 
          {
            $resp = ['error' => 0,'mensaje' => 'ok'];
            return $resp;
          }


          // si llega aca es porque debe bloquear consumos --> si alcanzo el limite no deja entrar 
          if (($producto->usuario_consumido >= $producto->usuario_limite_consumo && $producto->usuario_limite_consumo != 0) ||
              ($producto->cliente_consumido >= $producto->cliente_limite_consumo && $producto->cliente_limite_consumo != 0))
          {
            $resp = ['error' => 1,'mensaje' =>'Su usuario Alcanzó el límite de consumos'];
            return $resp;
          }

          $resp = ['error' => 0,'mensaje' => 'ok'];
          return $resp;

        }
      }
    */
    /* Lo cambiamos por este control el 05/10/2020 */
    public static function obtenerConsumos($productos, $id_producto)
    {
        if (isset($productos[$id_producto])) {
            $usuario = \Session::get('usuario');
            $user_id = $usuario->user_id;
            $client_id = $usuario->cliente['client_id'];
            $ver_consumos = self::ControlConsumos($client_id, $user_id, $id_producto);
            if (!empty($ver_consumos)) {
                if ($ver_consumos->permitir == '0') {
                    $resp = ['error' => 1, 'mensaje' => $ver_consumos->mensaje . ', por favor contactese con el area comercial de Fidelitas al +54 11 5254 9950'];
                    return $resp;
                } else {
                    $resp = ['error' => 0, 'mensaje' => 'ok'];
                    return $resp;
                }
            }
        }
    }
    private static function ControlConsumos($cliente, $usuario, $prod)
    {
        $ver_consumos = SQLConnection::backendStoreProcedure('obtener_control_consumos', array($cliente, $usuario, $prod), 'selectOne');
        return $ver_consumos;
    }



    public static function armarDomicilio($domicilio, $codpos, $loc_nombre, $prv_nombre, $pai_nombre)
    {
        $return = $domicilio;
        if ($codpos) {
            $return .= ', (' . $codpos . ')';
        }
        if ($loc_nombre) {
            $return .= ', ' . $loc_nombre;
        }
        if ($prv_nombre) {
            $return .= ', ' . $prv_nombre;
        }
        if ($pai_nombre) {
            $return .= ', ' . $pai_nombre;
        }
        return $return;
    }

    public static function XMLRequest($url)
    {
        $xml = file_get_contents($url);
        foreach ($http_response_header as $header) {
            if (preg_match('#^Content-Type: text/xml; charset=(.*)#i', $header, $m)) {
                switch (strtolower($m[1])) {
                    case 'utf-8':
                        // do nothing
                        break;
                    case 'iso-8859-1':
                        /* $xml = utf8_encode($xml); */
                        $xml = mb_convert_encoding($xml, 'ISO-8859-1', 'UTF-8');
                        break;
                    default:
                        $xml = iconv($m[1], 'utf-8', $xml);
                }
                break;
            }
        }
        return simplexml_load_string($xml);
    }

    public static function switchToEndArray($array, $var)
    {
        if (isset($array[$var])) {
            $last = $array[$var];
            unset($array[$var]);
            $array[$var] = $last;
            return $array;
        }
        return $array;

    }

    public static function convertDate($date, $convert_format)
    {
        $date = new DateTime($date);
        return $date->format($convert_format);
    }

    public static function obtenerImagenImperium()
    {
        return 'data:image/png;base64,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AAAAAAAAAAAAgJCYAwAAAAAAAAAAAAAAAAAAAEBIzAEAAAAAAAAAAAAAAAAAAAAgJOYAAAAAAAAAAAAAAAAAAAAAEBJzAAAAAAAAAAAAAAAAAAAAAAiJOQAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAAAQmIOAAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAICQmAMAAAAAAAAAAAAAAAAAAABASMwBAAAAAAAAAAAAAAAAAAAAICTmAAAAAAAAAAAAAAAAAAAAABAScwAAAAAAAAAAAAAAAAAAAAAIiTkAAAAAAAAAAAAAAAAAAAAAhMQcAAAAAAAAAAAAAAAAAAAAAEJiDgAAAAAAAAAAAAAAAAAAAAAhMQcAAAAAAAAAAAAAAAAAAACAkJgDAAAAAAAAAAAAAAAAAAAAQEjMAQAAAAAAAAAAAAAAAAAAACAk5gAAAAAAAAAAAAAAAAAAAAAQEnMAAAAAAAAAAAAAAAAAAAAACIk5AAAAAAAAAAAAAAAAAAAAAITEHAAAAAAAAAAAAAAAAAAAAABCYg4AAAAAAAAAAAAAAAAAAAAAockEAAAAAAAAAAAAAMAdncc+WAEAAAAA+ITRBAAAAAAAAAAAAAAAAAAAAAAdMQcAAAAAAAAAAAAAAAAAAACAkJgDAAAAAAAAAAAAAAAAAAAAQEjMAQAAAAAAAAAAAAAAAAAAACAk5gAAAAAAAAAAAAAAAAAAAAAQEnMAAAAAAAAAAAAAAAAAAAAACIk5AAAAAAAAAAAAAAAAAAAAAITEHAAAAAAAAAAAAAAAAAAAAABCYg4AAAAAAAAAAAAAAAAAAAAAITEHAAAAAAAAAAAAAAAAAAAAgJCYAwAAAAAAAAAAAAAAAAAAAEBIzAEAAAAAAAAAAAAAAAAAAAAgJOYAAAAAAAAAAAAAAAAAAAAAEBJzAAAAAAAAAAAAAAAAAAAAAAiJOQAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAAAQmIOAAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAICQmAMAAAAAAAAAAAAAAAAAAABASMwBAAAAAAAAAAAAAAAAAAAAICTmAAAAAAAAAAAAAAAAAAAAABAScwAAAAAAAAAAAAAAAAAAAAAIiTkAAAAAAAAAAAAAAAAAAAAAhMQcAAAAAAAAAAAAAAAAAAAAAEJiDgAAAAAAAAAAAAAAAAAAAAAhMQcAAAAAAAAAAAAAAAAAAACAkJgDAAAAAAAAAAAAAAAAAAAAQEjMAQAAAAAAAAAAAAAAAAAAACAk5gAAAAAAAAAAAAAAAAAAAAAQEnMAAAAAAAAAAAAAAAAAAAAACIk5AAAAAAAAAAAAAAAAAAAAAITEHAAAAAAAAAAAAAAAAAAAAABCYg4AAAAAAAAAAAAAAAAAAAAAITEHAAAAAAAAAAAAAAAAAAAAgJCYAwAAAAAAAAAAAAAAAAAAAEBIzAEAAAAAAAAAAAAAAAAAAAAgJOYAAAAAAAAAAAAAAAAAAAAAEBJzAAAAAAAAAAAAAAAAAAAAAAiJOQAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAAAQmIOAAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAICQmAMAAAAAAAAAAAAAAAAAAABASMwBAAAAAAAAAAAAAAAAAAAAICTmAAAAAAAAAAAAAAAAAAAAABAScwAAAAAAAAAAAAAAAAAAAAAIiTkAAAAAAAAAAAAAAAAAAAAAhMQcAAAAAAAAAAAAAAAAAAAAAEJiDgAAAAAAAAAAAAAAAAAAAAAhMQcAAAAAAAAAAAAAAAAAAACAkJgDAAAAAAAAAAAAAAAAAAAAQEjMAQAAAAAAAAAAAAAAAAAAACAk5gAAAAAAAAAAAAAAAAAAAAAQEnMAAAAAAAAAAAAAAAAAAAAACIk5AAAAAAAAAAAAAAAAAAAAAITEHAAAAAAAAAAAAAAAAAAAAABCYg4AAAAAAAAAAAAAAAAAAAAAITEHAAAAAAAAAAAAAAAAAAAAgJCYAwAAAAAAAAAAAAAAAAAAAEBIzAEAAAAAAAAAAAAAAAAAAAAgJOYAAAAAAAAAAAAAAAAAAAAAEBJzAAAAAAAAAAAAAAAAAAAAAAiJOQAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAAAQmIOAAAAAAAAAAAAAAAAAAAAACExBwAAAAAAAAAAAAAAAAAAAICQmAMAAAAAAAAAAAAAAAAAAABASMwBAAAAAAAAAAAAAAAAAAAAICTmAAAAAAAAAAAAAAAAAAAAABAScwAAAAAAAAAAAAAAAAAAAAAIiTkAAAAAAAAA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AAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAQJOYAAAAAAAAAAAAAAAAAAAAAECTmAAAAAAAAAAAAAAAAAAAAABAk5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA/9uDQwIAAAAAQf9f+8IEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvwAinv82p74PMQAAAABJRU5ErkJggg==';
    }

    public static function obtenerImagenInquiro()
    {
        return 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARAAAAA2CAYAAAAPiMaKAAAAAXNSR0IArs4c6QAAAAlwSFlzAAAuIwAALiMBeKU/dgAABCdpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjMwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MzAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjcyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj41NDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAg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';
    }

    public static function obtenerImagenFidelitas()
    {
        return "data:image/jpeg;base64,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";
    }

    public static function obtenerImagenInfodata()
    {
        return "data:image/jpeg;base64,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AD+AAAA4QklNBA0AAAAAAAQAAAB4OEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAABOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANTAAAABgAAAAAAAAAAAAAAyAAAAooAAAAPAEkATgBGAE8ARABBAFQAQQAxADUAMABkAHAAaQBzAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAKKAAAAyAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAAyAAAAABSZ2h0bG9uZwAAAooAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAAAMgAAAAAUmdodGxvbmcAAAKKAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAA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QklNBCEAAAAAAFMAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAASAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAQwBDAAAAAQA4QklNBAYAAAAAAAcAAgABAAEBAP/hDe1odHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+DQo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6MDk6MTUgICAgICAgICI+DQoJPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4NCgkJPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAxNC0wMy0xN1QxNTozNTo0NS0wMzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxNC0wMy0xN1QxNTozNjozOS0wMzowMCIgeG1wOk1vZGlmeURhdGU9IjIwMTQtMDMtMTdUMTU6MzY6MzktMDM6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6M2UxMDY3YmItNTFiNC00ZDM0LWIyY2YtODIyMWM4NGRhNGU1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjljZTNjMTliLTI1YmItNGM0Yy05OWVhLWRjZWYxMDE5Yzg3YyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjljZTNjMTliLTI1YmItNGM0Yy05OWVhLWRjZWYxMDE5Yzg3YyIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiPg0KCQkJPHhtcE1NOkhpc3Rvcnk+DQoJCQkJPHJkZjpTZXE+DQoJCQkJCTxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjljZTNjMTliLTI1YmItNGM0Yy05OWVhLWRjZWYxMDE5Yzg3YyIgc3RFdnQ6d2hlbj0iMjAxNC0wMy0xN1QxNTozNTo0NS0wMzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIi8+DQoJCQkJCTxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozZTEwNjdiYi01MWI0LTRkMzQtYjJjZi04MjIxYzg0ZGE0ZTUiIHN0RXZ0OndoZW49IjIwMTQtMDMtMTdUMTU6MzY6MzktMDM6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPg0KCQkJCTwvcmRmOlNlcT4NCgkJCTwveG1wTU06SGlzdG9yeT4NCgkJPC9yZGY6RGVzY3JpcHRpb24+DQoJCTxyZGY6RGVzY3JpcHRpb24geG1sbnM6TWljcm9zb2Z0UGhvdG89Imh0dHA6Ly9ucy5taWNyb3NvZnQuY29tL3Bob3RvLzEuMC8iPjxNaWNyb3NvZnRQaG90bzpEYXRlQWNxdWlyZWQ+MjAxNy0wNC0xMVQxMTo0ODowODwvTWljcm9zb2Z0UGhvdG86RGF0ZUFjcXVpcmVkPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj4NCjwveDp4bXBtZXRhPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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";
    }

    public static function obtenerImagenAvalDigital()
    {
        return 'data:image/png;base64,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CiAgICB4bWxuczppcHRjRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6cGx1cz0iaHR0cDovL25zLnVzZXBsdXMub3JnL2xkZi94bXAvMS4wLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgeG1wTU06RG9jdW1lbnRJRD0iZ2ltcDpkb2NpZDpnaW1wOmRiNGI3N2VjLWQ2MGUtNDZiMi04MjAzLWRmYzdjM2NmZmJlMyIKICAgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDplY2ExZWMwZS01NTJkLTQ0NjUtODIxZS02YjM4MmFmNTRiMGYiCiAgIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiNGYxZWQ5OC01Nzg2LTQwOWMtOWNiZi00OGRjOTg3ZDE1NDMiCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTYyMTM0NDg4ODk3ODkzNSIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjgiCiAgIGRjOkZvcm1hdD0iaW1hZ2UvcG5nIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCI+CiAgIDxpcHRjRXh0OkxvY2F0aW9uQ3JlYXRlZD4KICAgIDxyZGY6QmFnLz4KICAgPC9pcHRjRXh0OkxvY2F0aW9uQ3JlYXRlZD4KICAgPGlwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgIDxyZGY6QmFnLz4KICAgPC9pcHRjRXh0OkxvY2F0aW9uU2hvd24+CiAgIDxpcHRjRXh0OkFydHdvcmtPck9iamVjdD4KICAgIDxyZGY6QmFnLz4KICAgPC9pcHRjRXh0OkFydHdvcmtPck9iamVjdD4KICAgPGlwdGNFeHQ6UmVnaXN0cnlJZD4KICAgIDxyZGY6QmFnLz4KICAgPC9pcHRjRXh0OlJlZ2lzdHJ5SWQ+CiAgIDx4bXBNTTpIaXN0b3J5PgogICAgPHJkZjpTZXE+CiAgICAgPHJkZjpsaQogICAgICBzdEV2dDphY3Rpb249InNhdmVkIgogICAgICBzdEV2dDpjaGFuZ2VkPSIvIgogICAgICBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY5ZDgyNGJlLWQzMGItNGJkYi1hYjEwLThlYjMxZTk3YTBlOCIKICAgICAgc3RFdnQ6c29mdHdhcmVBZ2VudD0iR2ltcCAyLjEwIChMaW51eCkiCiAgICAgIHN0RXZ0OndoZW49Ii0wMzowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgIDxwbHVzOkltYWdlU3VwcGxpZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZVN1cHBsaWVyPgogICA8cGx1czpJbWFnZUNyZWF0b3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZUNyZWF0b3I+CiAgIDxwbHVzOkNvcHlyaWdodE93bmVyPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6Q29weXJpZ2h0T3duZXI+CiAgIDxwbHVzOkxpY2Vuc29yPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6TGljZW5zb3I+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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';
    }

    public static function validarAjax()
    {
        if (\Request::ajax()) {
            $usuario = \Session::get('usuario');

            if ($usuario == null) {
                return false;
            }
        } else {
            return 'HTTP';
        }

        return true;

    }

    public static function obtenerTraduccionesGraficos()
    {
        //Traduccion de titutlos graficos contables = INGLES
        $traducciones_graficos = [];

        $traducciones_graficos['esp'] = array(
            'capital_de_trabajo_esp' => 'CAPITAL DE TRABAJO',
            'patrimonial_esp' => 'ESTRUCTURA PATRIMONIAL',
            'solvencia_esp' => 'SOLVENCIA',
            'liquidez_corriente_esp' => 'LIQUIDEZ CORRIENTE',
            'endeudamiento_corriente_esp' => 'ENDEUDAMIENTO CORRIENTE',
            'efecto_palanca_esp' => 'EFECTO PALANCA',
            'ventas_esp' => 'VENTAS',
            'gastos_totales_sobre_ventas_esp' => 'GASTOS TOTALES SOBRE VENTAS (%)',
            'performance_esp' => 'RENTABILIDAD SOBRE VENTAS (%)',
            'cap_trabajo_activo_corriente_total' => 'Activo Corriente',
            'cap_trabajopasivo_corriente_total' => 'Pasivo Corriente',
            'estructura_patrimonial_activo' => 'Activo',
            'estructura_patrimonial_pasivo' => 'Pasivo',
            'estructura_patrimonial_pn' => 'Patrimonio Neto'
        );

        $traducciones_graficos['ing'] = array(
            'capital_de_trabajo_ing' => 'WORKING CAPITAL',
            'patrimonial_ing' => 'PATRIMONIAL ESTRUCTURE',
            'solvencia_ing' => 'SOLVENCY',
            'liquidez_corriente_ing' => 'CURRENT LEVERAGEIQUIDITY',
            'endeudamiento_corriente_ing' => 'CURRENT INDEBTEDNESS',
            'efecto_palanca_ing' => 'LEVERAGE',
            'ventas_ing' => 'SELLS',
            'gastos_totales_sobre_ventas_ing' => 'TOTAL EXPENSES/SALES (%)',
            'performance_ing' => 'NET PROFIT',
            'cap_trabajo_activo_corriente_total' => 'Current Assets',
            'cap_trabajopasivo_corriente_total' => 'Current Liabilities',
            'estructura_patrimonial_activo' => 'Assets',
            'estructura_patrimonial_pasivo' => 'Liabilities',
            'estructura_patrimonial_pn' => 'Net Worth'
        );

        $traducciones_graficos['por'] = array(
            'capital_de_trabajo_por' => 'CAPITAL DE GIRO',
            'patrimonial_por' => 'SOLVÊNCIA PATRIMONIAL',
            'solvencia_por' => 'SOLVÊNCIA',
            'liquidez_corriente_por' => 'LIQUIDEZ CORRENTE',
            'endeudamiento_corriente_por' => 'ENDIVIDAMENTO CIRCULANTES',
            'efecto_palanca_por' => 'LEVERAGE',
            'ventas_por' => 'VENDAS',
            'gastos_totales_sobre_ventas_por' => 'DESPESAS TOTAIS / VENDAS (%)',
            'performance_por' => 'RENTABILIDADE (%)',
            'cap_trabajo_activo_corriente_total' => 'Ativo Circulante',
            'cap_trabajopasivo_corriente_total' => 'Passivo Circulante',
            'estructura_patrimonial_activo' => 'Ativo',
            'estructura_patrimonial_pasivo' => 'Passivo',
            'estructura_patrimonial_pn' => 'Patrimônio Líquido'
        );

        return $traducciones_graficos;
    }

    public static function resultadoCombinaciones($words)
    {
        $count_words = count($words);
        if ($count_words <= 1) {
            $result = $words;
        } else {
            $result = array();
            for ($i = 0; $i < $count_words; ++$i) {
                $firstword = $words[$i];
                $remainingwords = array();
                for ($j = 0; $j < $count_words; ++$j) {
                    if ($i <> $j)
                        $remainingwords[] = $words[$j];
                }
                $combos = self::resultadoCombinaciones($remainingwords);
                for ($j = 0; $j < count($combos); ++$j) {
                    $result[] = $firstword . ' ' . $combos[$j];
                }
            }
        }
        return $result;
    }




    public static function abrirDirectorio($path, $reference = '')
    {
        /*
        verifica si existe la ruta, 
        si es un directorio lo abre y devuelve el objeto de tipo array, 
        con el cual se trabajará en la posición cero, ejemplo: 

        $opened_root = Misc::abrirDirectorio($root_path);
        if (is_array($opened_root)) {
          while (($sub_folder_or_file = readdir($opened_root[0])) !== false) {
          ...
          }
          closedir($opened_root[0]);
        }

        (el dir debe ser cerrado manualmente luego de usar este método)
        si no es un directorio devuelve false
        si no tiene permisos para lectura devuelve un string con el error
        la variable REFERENCE puede usarse para aumentar la precisión del error, 
        por ejemplo pasar la linea y nombre de un archivo, datos previos al llamado del método, entre otros.
        */
        if (isset($path) && file_exists($path)) {
            if (is_dir($path) && (basename($path) != '.') && (basename($path) != '..')) {
                if (($opened_path = opendir($path)) !== false) {
                    return [$opened_path];
                }
                return "{$reference}[$path] Error: no se pudo abrir el directorio, revisar si tiene permisos.";
            }
            return false; // no es un directorio, pero esto no es necesariamente un error.
        }
        return "{$reference}[$path] Error: el directorio no existe.";
    }

    public static function abrirArchivo($path, $reference = '')
    {
        /*
        verifica si existe la ruta, 
        si es un archivo lo abre y devuelve el objeto de tipo array, 
        con el cual se trabajará en la posición cero, ejemplo: 

        $opened_file = Misc::abrirArchivo($path);
        if (is_array($opened_file)){
          $numero_linea = 0;
          while (($line = fgets($opened_file[0])) !== false) {
            $numero_linea++;
            ...
          }
          fclose($opened_file[0]);
        }

        (el archivo debe ser cerrado manualmente luego de usar este método)
        si no es un archivo devuelve false
        si no tiene permisos para lectura devuelve un string con el error
        la variable REFERENCE puede usarse para aumentar la precisión del error, 
        por ejemplo pasar la linea y nombre de un archivo, datos previos al llamado del método, entre otros.
        */
        if (isset($path) && file_exists($path)) {
            if (is_file($path)) {
                if (($opened_path = fopen($path, "r")) !== false) {
                    return [$opened_path];
                }
                return "{$reference}[$path] Error: no se pudo abrir el archivo, revisar si tiene permisos.";
            }
            return false; // no es un archivo, pero esto no es necesariamente un error.
        }
        return "{$reference}[$path] Error: el archivo no existe.";
    }

    public static function convertirFormatoFecha($date, $from = 'd/m/Y', $to = 'Y-m-d')
    {
        if (isset($date) && isset($from) && isset($to)) {
            $aux = DateTime::createFromFormat($from, $date);
            if ($aux !== false) {
                $date = $aux->format($to);
            }
            return $date;
        }
        return null;
    }

    public static function limpiarString($str)
    {
        //limpia string para búsqueda, solo dejando caracteres alfanuméricos y espacios simples
        $str = trim($str);
        $str = preg_replace('/\s+/', ' ', $str);
        $str = preg_replace('/[^\p{Latin}\d ]/u', '', $str);
        return strtoupper($str);
        //return preg_replace( "/[^A-Z0-9Ñ ]/u", "", $str);
    }

    //Generador de Hash sin reverso, el segundo parámetro sirve para identificar cuantos caracteres devuelve el resultado.
    public static function HashGenerator($user_id, $str_quantity_result)
    {
        return strtoupper(substr(md5(uniqid($user_id, true)), 0, $str_quantity_result));
    }

    /**
     * Convierte cadenas vacías en valores null dentro de un arreglo.
     *
     * @param array<string|null|mixed> $array Arreglo a procesar.
     * @return array<string|null|mixed>
    */
    public static function convertirStringsVaciosEnNull($array = [])
    {
        return array_map(
            function ($valor) {
                return ($valor === '' || $valor === "") ? null : $valor;
            },
            $array
        );
    }

    public static function porcentajeContableEnBaseAlAnio($porcentaje_contable, $fecha, $porcentaje_deducido_por_anio = 20)
    {
        $datetime1 = DateTime::createFromFormat('d/m/Y', $fecha);
        $datetime2 = new DateTime();
        $diff = $datetime1->diff($datetime2)->y;
        if ($diff > 7)
            $diff = 7;
        if ($diff > 3) {
            $porcentaje_deducido_por_anio = $porcentaje_deducido_por_anio * ($diff - 3);
            $porcentaje_contable = $porcentaje_contable - (($porcentaje_deducido_por_anio * $porcentaje_contable) / 100);
        }
        return $porcentaje_contable;
    }

    // public static function obtenerEdadPersonaFisica($cuit) {
    //   $edad = 32;
    //   $exec = SQLConnection::backendStoreProcedure('obtener_edad_persona_fisica', array($cuit));
    //   if (sizeof($exec) > 0) {
    //     $hoy = new DateTime();
    //     $hoy = (int) $hoy->format('Y');
    //     if (isset($exec[0]->fecha_nac) && ($exec[0]->fecha_nac != '')){
    //       $fecha = str_replace('-', '/', $exec[0]->fecha_nac);
    //       $aux = explode('/', $fecha);
    //       foreach ($aux as $parte){
    //         if (strlen($parte) == 4){
    //           $anio = (int) $parte;
    //         }
    //       }
    //       $edad = isset($anio) ? ($hoy - $anio) : $edad;
    //     } elseif (isset($exec[0]->anio_nac) && ($exec[0]->anio_nac != '')) {
    //       $anio = (int) $exec[0]->anio_nac;
    //       $edad = isset($anio) ? ($hoy - $anio) : $edad; 
    //     }
    //   }
    //   return $edad;
    // }

    public static function obtenerEdadPersonaFisica($cuit)
    {
        $fecha_nacimiento = '';
        $edad = null;
        $hoy = date('Y');
        $exec = SQLConnection::backendStoreProcedure('obtener_edad_persona_fisica', array($cuit), 'selectOne');
        if (isset($exec->fecha_nac)) {
            $fecha_nacimiento = self::convertirFormatoFecha($exec->fecha_nac, 'Y-m-d', 'd/m/Y');
        }
        if (!empty($fecha_nacimiento)) {
            if (isset($fecha_nacimiento) && ($fecha_nacimiento !== '') && ($fecha_nacimiento !== NULL)) {
                $edad = self::calcularEdad($fecha_nacimiento);
            }
        } elseif (isset($exec->anio_nac) && ($exec->anio_nac !== '') && ($exec->anio_nac !== NULL)) {
            $anio = (int) $exec->anio_nac;
            $edad = isset($anio) ? ($hoy - $anio) : $edad;
        }

        return $edad;
    }

    public static function demeritarScorePorEdad($calc_score, $edad, $demerito = 0.1)
    {
        $aux_edad = $edad;
        if ($edad > 99) {
            $edad = 99;
        }

        $demerito = Sqlconnection::backendStoreProcedure('obtener_score_por_edad', array($edad), true);
        if (isset($demerito->directo)) {
            $calc_score['score'] = $calc_score['score'] + ($demerito->directo);
            //$calc_score['afecta_directo']['debug'][] =  "Le suma: " .($demerito->directo). " por edad ($aux_edad años)";
            $calc_score['afecta_directo']['debug'] = "Le suma: " . ($demerito->directo) . " por edad ($aux_edad años)";
        }

        /* 
        $min = 28;
        $max = 42;
        if ($edad < $min) {
          $calc_score['score'] = $calc_score['score'] - ($demerito * ($min - $edad));
          $calc_score['afecta_directo']['debug'][] =  "Le suma: " .(-1 * ($demerito * ($min - $edad))). " demerito por edad < $min ($demerito punto por cada año menos)";
        } else if ($edad > $max) {
          $calc_score['score'] = $calc_score['score'] - ($demerito * ($edad - $max));
          $calc_score['afecta_directo']['debug'][] =  "Le suma: " .(-1 * ($demerito * ($edad - $max))). " demerito por edad > $max ($demerito punto por cada año de más)";
        }
        */

        return $calc_score;
    }

    public static function demeritaSiCuitObservado($calc_score, $observado, $demerito = 10)
    {
        if ($observado) {
            $calc_score['score'] = $calc_score['score'] - $demerito;
            //   $calc_score['afecta_directo']['debug'][] =  "Le suma: " .(-1 * ($demerito)). " demerito por cuit observado";
        }
        return $calc_score;
    }

    public static function tipoPersona($cuit)
    {
        $fisica_juridica = SQLConnection::obtenerTipoPersona($cuit);
        if (isset($fisica_juridica->tipo_persona)) {
            if ($fisica_juridica->tipo_persona == 'F' || $fisica_juridica->tipo_persona == 'J') {
                return $fisica_juridica->tipo_persona;
            } else {
                return (substr($cuit, 0, 1) == 3) ? 'J' : 'F';
            }
        } else {
            return (substr($cuit, 0, 1) == 3) ? 'J' : 'F';
        }
    }

    public static function nacionalidad($cuit)
    {
        $nacionalidad = SQLConnection::obtenerTipoPersona($cuit);
        return $nacionalidad->country_code ?? null;
    }

    public static function ameritaPorSituacionUno($bancos)
    {
        $amerita = true;
        $cantidad_situacion_1 = 0;

        if (isset($bancos) && is_array($bancos) && (sizeof($bancos) > 0)) {
            foreach ($bancos as $banco) {
                if (isset($banco->situacion) && (str_replace(' ', '', $banco->situacion) != '') && (intval($banco->situacion) != 1)) {
                    $amerita = false;
                } else if (isset($banco->situacion) && (intval($banco->situacion) == 1)) {
                    $cantidad_situacion_1++;
                }
            }
        } else {
            $amerita = false;
        }
        $situacion['amerita'] = ($amerita && ($cantidad_situacion_1 > 0));
        $situacion['cantidad'] = $cantidad_situacion_1;
        return $situacion;
    }


    public static function sumaPorSituacionUno($calc_score, $cantidad)
    {
        if ($cantidad > 24) {
            $cantidad = 24;
        }
        $amerita = Sqlconnection::backendStoreProcedure('obtener_score_situacion_uno', array($cantidad), true);
        if (isset($amerita->directo)) {
            $calc_score['afecta_directo']['debug'] = "Le suma: " . $amerita->directo . "  ameritado por poseer situación 1";
            $calc_score['score'] = $calc_score['score'] + $amerita->directo;
        }
        return $calc_score;
    }


    public static function ameritaPorEmpleo($calc_score, $cuit, $amerita = 5)
    {
        $empleado_de = SQLConnection::obtenerEmpleadoDe($cuit);
        $inscripciones = SQLConnection::obtenerInscripciones($cuit);
        if ((sizeof(array($empleado_de)) > 0) || ((sizeof(array($inscripciones)) > 0) && ((isset($inscripciones->monotributo)))) || (isset($inscripciones->empleador) && $inscripciones->empleador == 'SI')) {
            //$calc_score['afecta_directo']['debug'][] =  "Le suma: " .$amerita. "  ameritado por poseer empleo/monotributo";
            $calc_score['afecta_directo']['debug'] = "Le suma: " . $amerita . "  ameritado por poseer empleo/monotributo";
            $calc_score['score'] = $calc_score['score'] + $amerita;
        }
        return $calc_score;
    }

    public static function diccionarioRazonesSociales($razon_social)
    {
        $words = explode(' ', $razon_social);
        $to_search[0][0] = ['ARG', 'ARGENTINA'];
        $to_search[0][1] = [];
        $to_search[1][0] = ['SACIIF'];
        $to_search[1][1] = [' SACII Y F'];
        $to_search[2][0] = ['SRL'];
        $to_search[2][1] = [' S R L', ' SOC RESP LTDA', ' SOCIEDAD DE RESPONSABILIDAD LIMITADA'];
        $to_search[3][0] = ['SA'];
        $to_search[3][1] = [' S A', ' SOCIEDAD ANONIMA'];
        $to_search[4][0] = ['SH'];
        $to_search[4][1] = [' S H', ' S DE H', ' SOCIEDAD DE HECHO'];
        $dictionary = false;

        foreach ($to_search as $array) {
            $dictionary = self::buscarArray($array[0], $words, array_map('ltrim', $array[1]));
            if (is_array($dictionary)) {
                return $dictionary;
            }

            if ($array[1] != []) {
                $dictionary = self::buscarString($array[1], $razon_social, array_map(function ($word) {
                    return ' ' . $word;
                }, $array[0]));
                if (is_array($dictionary)) {
                    return $dictionary;
                }
            }
        }
        return false;
    }

    public static function buscarArray($to_search, $words, $to_add = [])
    {
        $aux = $to_search;
        $dictionary = [];
        foreach ($to_search as $searching) {
            $key = array_search($searching, $words);
            if ($key !== false && $key != 0) {
                $aux = array_merge($aux, $to_add);
                foreach ($aux as $value) {
                    $words[$key] = $value;
                    $dictionary[] = implode(' ', $words);
                }
                return $dictionary;
            }
        }
        return false;
    }

    public static function buscarString($to_search, $string, $to_add = [])
    {
        $aux = $to_search;
        $dictionary = [];
        foreach ($to_search as $searching) {
            $key = strpos($string, $searching);
            if ($key !== false && $key != 0) {
                $aux = array_merge($aux, $to_add);
                foreach ($aux as $value) {
                    $dictionary[] = preg_replace('/' . $searching . '/', $value, $string, 1);
                }
                return $dictionary;
            }
        }
        return false;
    }


    public static function removerDiccionarioRazonesSociales($razon_social)
    {
        $words = explode(' ', $razon_social);
        $to_search[0][0] = ['ARG', 'ARGENTINA'];
        $to_search[0][1] = [];
        $to_search[1][0] = ['SACIIF'];
        $to_search[1][1] = [' SACII Y F'];
        $to_search[2][0] = ['SRL'];
        $to_search[2][1] = [' S R L', ' SOC RESP LTDA', ' SOCIEDAD DE RESPONSABILIDAD LIMITADA'];
        $to_search[3][0] = ['SA'];
        $to_search[3][1] = [' S A', ' SOCIEDAD ANONIMA'];
        $to_search[4][0] = ['SH'];
        $to_search[4][1] = [' S H', ' S DE H', ' SOCIEDAD DE HECHO'];
        $dictionary = false;

        foreach ($to_search as $array) {
            $string = self::removerArray($array[0], $words, array_map('ltrim', $array[1]));
            if ($string !== false) {
                return $string;
            }

            if ($array[1] != []) {
                $string = self::removerString($array[1], $razon_social, array_map(function ($word) {
                    return ' ' . $word;
                }, $array[0]));
                if ($string !== false) {
                    return $string;
                }
            }
        }
        return false;
    }

    public static function removerArray($to_remove, $words, $to_add = [])
    {
        $aux = $to_remove;
        foreach ($to_remove as $searching) {
            $key = array_search($searching, $words);
            if ($key !== false && $key != 0) {
                unset($words[$key]);
                $words = implode(' ', $words);
                return $words;
            }
        }
        return false;
    }

    public static function removerString($to_remove, $string, $to_add = [])
    {
        $aux = $to_remove;
        foreach ($to_remove as $searching) {
            $key = strpos($string, $searching);
            if ($key !== false && $key != 0) {
                $string = str_replace($searching, '', $string);
                return $string;
            }
        }
        return false;
    }

    public static function obtenerImagenMarcasExterno($num_acta, $num_boletin)
    {
        $url = 'https://portaltramites.inpi.gob.ar/Marcas/Logo?Acta=' . $num_acta;
        $url_valida = get_headers($url);
        if ($url_valida[0] == 'HTTP/1.1 302 Found' || !$url_valida) {
            return false;
        } else {
            $file = file_get_contents($url);
            $data_image = str_replace(array("\r", "\n", "/>", '<img src="data:image/gif;base64,', '"'), array("", "", "", "", "", ""), $file);
            $data_image = trim($data_image);
            $data_image_decode = base64_decode($data_image);

            if (!is_dir('/var/www/html/compartido/marcas/' . $num_boletin . '/marcas/')) {
                $mkdir = mkdir('/var/www/html/compartido/marcas/' . $num_boletin . '/marcas/', 0777, true);
                if ($mkdir) {
                    file_put_contents('/var/www/html/compartido/marcas/' . $num_boletin . '/marcas/' . $num_acta . '.gif', $data_image_decode);
                    return true;
                }
            } elseif (!file_exists('/var/www/html/compartido/marcas/' . $num_boletin . '/marcas/' . $num_acta . '.gif')) {
                file_put_contents('/var/www/html/compartido/marcas/' . $num_boletin . '/marcas/' . $num_acta . '.gif', $data_image_decode);
                return true;
            }
            return true;
        }
    }

    // public static function ddd($var) {
    //   var_dump($var);
    //   die();
    // }

    public static function ddd($var)
    {
        echo "<pre>" . print_r($var, true) . "</pre>";
        die();
    }

    public static function scorePorPreferencias($total_por_grupo, $porcentaje_por_grupo, &$suma_de_grupos = 0, &$porcentaje_por_grupo_afectado_por_preferencias = 0, &$score_contables = 0)
    {
        $interes = [];
        $interes[0] = 0.00; // nada
        $interes[1] = 0.10; // mínimo
        $interes[2] = 0.26; // poco
        $interes[3] = 0.68; // normal
        $interes[4] = 0.87; // bastante
        $interes[5] = 1.00; // mucho

        $arr_aux = [];
        $result = [];
        $preferencias = isset(Session::get('usuario')->preferencias) ? Session::get('usuario')->preferencias : null;
        $aux_porcentaje_grupo = clone $porcentaje_por_grupo;
        foreach ($total_por_grupo as $key => $value) {
            if ($key == 1) { // judicial
                $preferencia = isset($preferencias->custom_score_judiciales) ? $interes[$preferencias->custom_score_judiciales] : $interes[3];
                unset($aux_porcentaje_grupo->judicial);
                $arr_aux[$key] = $preferencia * $value;
            } elseif ($key == 2) { // cheques
                unset($aux_porcentaje_grupo->cheques);
                $preferencia = isset($preferencias->custom_score_cheques) ? $interes[$preferencias->custom_score_cheques] : $interes[3];
                $arr_aux[$key] = $preferencia * $value;
            } elseif ($key == 3) { // cendeu
                unset($aux_porcentaje_grupo->cendeu);
                $preferencia = isset($preferencias->custom_score_cendeu) ? $interes[$preferencias->custom_score_cendeu] : $interes[3];
                $arr_aux[$key] = $preferencia * $value;
            } elseif ($key == 4) { // fiscal
                unset($aux_porcentaje_grupo->fiscal);
                $preferencia = isset($preferencias->custom_score_fiscales) ? $interes[$preferencias->custom_score_fiscales] : $interes[3];
                $arr_aux[$key] = $preferencia * $value;
            }
        }

        $aux_porcentaje_grupo = json_decode(json_encode($aux_porcentaje_grupo), true);

        if (!isset($aux_porcentaje_grupo['contable'])) {
            $aux_porcentaje_grupo['contable'] = 0;
        }

        if (isset($score_contables->fecha_balance) && !empty($score_contables->fecha_balance)) {
            $aux_porcentaje_grupo['contable'] = self::porcentajeContableEnBaseAlAnio($aux_porcentaje_grupo['contable'], $score_contables->fecha_balance);
        }
        foreach ($aux_porcentaje_grupo as $key => $value) {
            if ($key == 'judicial') { // judicial
                $preferencia = isset($preferencias->custom_score_judiciales) ? $interes[$preferencias->custom_score_judiciales] : $interes[3];
                $aux_porcentaje_grupo[$key] = $preferencia * $value;
            } elseif ($key == 'cheques') { // cheques
                $preferencia = isset($preferencias->custom_score_cheques) ? $interes[$preferencias->custom_score_cheques] : $interes[3];
                $aux_porcentaje_grupo[$key] = $preferencia * $value;
            } elseif ($key == 'cendeu') { // cendeu
                $preferencia = isset($preferencias->custom_score_cendeu) ? $interes[$preferencias->custom_score_cendeu] : $interes[3];
                $aux_porcentaje_grupo[$key] = $preferencia * $value;
            } elseif ($key == 'fiscal') { // fiscal
                $preferencia = isset($preferencias->custom_score_fiscales) ? $interes[$preferencias->custom_score_fiscales] : $interes[3];
                $aux_porcentaje_grupo[$key] = $preferencia * $value;
            } elseif ($key == 'formal') { // formal
                $preferencia = isset($preferencias->custom_score_formales) ? $interes[$preferencias->custom_score_formales] : $interes[3];
                $aux_porcentaje_grupo[$key] = $preferencia * $value;
            } elseif ($key == 'contable') { // contable
                $preferencia = isset($preferencias->custom_score_contable) ? $interes[$preferencias->custom_score_contable] : $interes[3];
                $aux_porcentaje_grupo[$key] = $preferencia * $value;
            }
        }

        foreach ($aux_porcentaje_grupo as $key => $value) {
            $aux_total[$key] = ($value / (array_sum($arr_aux) + array_sum(array_values($aux_porcentaje_grupo)))) * 100;
            if ($key == 'judicial') { // judicial
                $porcentaje_por_grupo_afectado_por_preferencias->judicial = $aux_total[$key];
            } elseif ($key == 'cheques') { // cheques
                $porcentaje_por_grupo_afectado_por_preferencias->cheques = $aux_total[$key];
            } elseif ($key == 'cendeu') { // cendeu
                $porcentaje_por_grupo_afectado_por_preferencias->cendeu = $aux_total[$key];
            } elseif ($key == 'fiscal') { // fiscal
                $porcentaje_por_grupo_afectado_por_preferencias->fiscal = $aux_total[$key];
            } elseif ($key == 'formal') { // formal
                $porcentaje_por_grupo_afectado_por_preferencias->formal = $aux_total[$key];
            } elseif ($key == 'contable') { // contable
                $porcentaje_por_grupo_afectado_por_preferencias->contable = $aux_total[$key];
            }
        }

        foreach ($arr_aux as $key => $value) {
            $result[$key] = ($value / (array_sum($arr_aux) + array_sum(array_values($aux_porcentaje_grupo)))) * 100;
            if ($key == 1) { // judicial
                $porcentaje_por_grupo_afectado_por_preferencias->judicial = $result[$key];
            } elseif ($key == 2) { // cheques
                $porcentaje_por_grupo_afectado_por_preferencias->cheques = $result[$key];
            } elseif ($key == 3) { // cendeu
                $porcentaje_por_grupo_afectado_por_preferencias->cendeu = $result[$key];
            } elseif ($key == 4) { // fiscal
                $porcentaje_por_grupo_afectado_por_preferencias->fiscal = $result[$key];
            }
        }

        $suma_de_grupos = (array_sum($arr_aux) + array_sum(array_values($aux_porcentaje_grupo)));

        return $result;
    }

    public static function parseFechaDatosAfip($fecha_parse)
    {
        $fecha = substr($fecha_parse, 0, 10);
        if (($fecha == '1901-01-01') || ($fecha == '1800-01-01')) {
            $fecha = null;
        }
        return $fecha;
    }

    public static function multiexplode($delimiters, $string)
    {
        $ready = str_replace($delimiters, $delimiters[0], $string);
        $launch = explode($delimiters[0], $ready);
        return $launch;
    }

    public static function calcularEdad($edad)
    {
        //dd($edad);//23/01/2000
        $edad_exp = self::multiexplode(array("/", "-"), $edad);
        $edad = self::convertirFormatoFecha($edad, 'd/m/Y', 'Y-m-d');
        $date = new DateTime($edad);
        $now = new DateTime();
        $interval = $now->diff($date);
        return $interval->y;
    }

    public static function esCuitArgentino($cuit)
    {
        if (isset($cuit) && is_numeric($cuit) && strlen($cuit) == 11 && (($cuit[0] == "2") || ($cuit[0] == "3"))) {
            return true;
        }
        return false;
    }

    public static function validarCuit($cuit)
    {
        if (isset($cuit) && is_numeric($cuit) && strlen($cuit) == 11) {
            $cadena = str_split($cuit);
            $result = $cadena[0] * 5;
            $result += $cadena[1] * 4;
            $result += $cadena[2] * 3;
            $result += $cadena[3] * 2;
            $result += $cadena[4] * 7;
            $result += $cadena[5] * 6;
            $result += $cadena[6] * 5;
            $result += $cadena[7] * 4;
            $result += $cadena[8] * 3;
            $result += $cadena[9] * 2;

            $div = intval($result / 11);
            $resto = $result - ($div * 11);

            if ($resto == 0) {
                if ($resto == $cadena[10]) {
                    return true;
                } else {
                    return false;
                }
            } elseif ($resto == 1) {
                if ($cadena[10] == 9 and $cadena[0] == 2 and $cadena[1] == 3) {
                    return true;
                } elseif ($cadena[10] == 4 and $cadena[0] == 2 and $cadena[1] == 3) {
                    return true;
                }
            } elseif ($cadena[10] == (11 - $resto)) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }


    // Diego
    public static function validarCuil($cuil)
    {
        $regex = "/^([0-9]{11})$/";
        return preg_match($regex, $cuil);
    }

    public static function validarFecha($fecha)
    {
        $regex = "/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/";
        if (preg_match($regex, $fecha)) {
            $fecha = explode('-', $fecha);
            return checkdate($fecha[1], $fecha[2], $fecha[0]);
        }
    }

    public static function generateRandomString($length = 10)
    {
        $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }


    //Llamado CURL.
    public static function CURLCall($url, $params, $type = "POST")
    {
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => $url,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => $type,
            CURLOPT_POSTFIELDS => $params,
            CURLOPT_HTTPHEADER => array(
                "cache-control: no-cache",
                "Content-Type: application/x-www-form-urlencoded"
            ),
        ));

        $response = curl_exec($curl);
        $err = curl_error($curl);

        curl_close($curl);

        if ($err) {
            return json_encode(array('error' => true));
        } else {
            return $response;
        }
    }
    /**
     * Calcula la diferencia en meses entre 2 fechas.
     *
     * @param DateTime $date1
     * @param DateTime $date2
     * @return int
     */
    public static function calcularDiferenciaEnMeses($date1, $date2)
    {
        $date1 = new DateTime($date1);
        $date2 = new DateTime($date2);
        $diff = $date1->diff($date2);

        $months = $diff->y * 12 + $diff->m + $diff->d / 30;

        return (int) round($months);
    }

    /// Para usar en modulos Imperium
    public static function periodoVencido($fmt = 'Ym')
    {
        $m1 = date_create_from_format('Y-m-d', date('Y-m-') . '01');
        $di = date_interval_create_from_date_string('-1 month');
        return date_format(date_add($m1, $di), $fmt);
    }

    public static function formatPeriodo($periodo, $fmt = 'm/Y')
    {
        $ym = substr($periodo, 0, 4) . '-' . substr($periodo, 4) . '-01';
        $f = date_create_from_format('Y-m-d', $ym);
        return date_format($f, $fmt);
    }

    public static function fechaMesProximo($fmt = 'd/m/Y')
    {
        $m1 = date_create_from_format('Y-m-d', date('Y-m-') . '01');
        $di = date_interval_create_from_date_string('1 month');
        return date_format(date_add($m1, $di), $fmt);
    }

    /** Devuelve un array con los ultimos 12 meses ordenados hacia atrás donde cada elemento es una estructura de 3 valores:
     *       periodo_Ym : 2020-05
     *       periodo_my : 05/2020
     *       periodo : 202005
     *
     *   Pasando el parámetro en false arranca desde el período vencido hacia atrás.
     **/
    public static function arrayPeriodos($acceso = true)
    {

        $servicios = Session::get('productos_cliente');
        foreach ($servicios as $serv) {
            if ($serv->id_producto == 73) {
                $acceso = ($serv->acceso_ci > 0) ? true : false;
                break;
            }
        }

        $periodos = [];
        $m1m = date_interval_create_from_date_string("-1 month");
        $d1 = $acceso == true ? date_create_from_format('Y-m-d', date('Y-m-') . '01') : date_add(date_create_from_format('Y-m-d', date('Y-m-') . '01'), $m1m);
        for ($j = 0; $j < 24; $j++) {
            $p = new stdClass();
            $p->periodo_my = date_format($d1, 'm/Y');
            $p->periodo_ym = date_format($d1, 'Y-m');
            $p->periodo = date_format($d1, 'Ym');
            $periodos[$j] = $p;
            $d1 = date_add($d1, $m1m);
        }
        return $periodos;

    }

    // dado un doc_id busca en la carpeta correspondiente el archivo PDF correspondiente. Devuelve el nombre del file o null si no hay file
    public static function searchFile($doc_id)
    {
        $fn = NULL;
        if ($doc_id > 0) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
            if (!empty($doc)) {

                if ($doc->doc_id_lista > 0 and $doc->doc_id_padre > 0) {
                    // Como es un doc hijo, apunto a abrir el padre : 
                    $doc_id = $doc->doc_id_padre;
                    $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
                }

                if ($doc->replicated_doc_id > 0) {
                    $replicated = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array(NULL, NULL, NULL, NULL, $doc_id), 'selectOne');
                    if (!empty($replicated)) {
                        $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($replicated->doc_id), 'selectOne');
                    }
                }

                $rootpath = env('PATH_DOCUMENTOS_IMPERIUM') . '/' . $doc->doc_path;
                if (is_dir($rootpath)) {
                    $pattern = $doc->preffix . '*.pdf';
                    $files = glob($rootpath . '/' . $pattern);
                    foreach ($files as $f => $file) {
                        $extn = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                        if ($extn == 'pdf') {
                            $fn = basename($file);
                        }
                    }
                }
            }
        }
        return $fn;
    }



    // IDEM ANTERIOR dado un doc_id busca en la carpeta correspondiente al archivo de reemplazo el archivo PDF según versión. Devuelve el nombre del file o null si no hay file
    public static function searchFileAux($doc_id, $doc_version)
    {
        $fn = NULL;
        if ($doc_id > 0 and $doc_version > 0) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento_Reemplazo', array($doc_id, $doc_version), 'selectOne');
            if (!empty($doc)) {

                if ($doc->doc_id_lista > 0 and $doc->doc_id_padre > 0) {
                    // Como es un doc hijo, apunto a abrir el padre : 
                    $doc_id = $doc->doc_id_padre;
                    $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
                }

                $rootpath = env('PATH_DOCUMENTOS_IMPERIUM') . '/' . $doc->doc_path . '/' . str_pad($doc_version, 3, '0', STR_PAD_LEFT);
                if (is_dir($rootpath)) {
                    $pattern = $doc->preffix . '*.pdf';
                    $files = glob($rootpath . '/' . $pattern);
                    foreach ($files as $f => $file) {
                        $extn = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                        if ($extn == 'pdf') {
                            $fn = basename($file);
                        }
                    }
                }
            }
        }
        return $fn;
    }


    // dado un DOC_ID devuelve la URL del documento, incluyendo búsqueda replicada 
    public static function getDocUrl($doc_id, $doc_version = NULL)
    {
        $f_url = NULL;
        $fn = NULL;

        if ($doc_id > 0) {

            // version solicitada
            $dv = ($doc_version == NULL) ? 0 : $doc_version;


            /*if ($doc_version == 0) {
              $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
              if($doc->replicated_doc_id > 0) {
                $replicated = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array(NULL, NULL, NULL, NULL, $doc_id), 'selectOne');
                $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($replicated->doc_id), 'selectOne');
              }
            }
            else {
              $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento_Reemplazo', array($doc_id, $doc_version), 'selectOne');
              $verspath = str_pad($doc_version, 3, '0', STR_PAD_LEFT) . '/';
            }*/

            $verspath = '';

            // evaluamos según versiones existentes del documento y estado //
            $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
            $docpath = $doc->doc_path;

            if ($doc->doc_version == 0) {
                // por si tiene replicado
                if ($doc->replicated_doc_id > 0) {
                    $replicated = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array(NULL, NULL, NULL, NULL, $doc_id), 'selectOne');
                    $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($replicated->doc_id), 'selectOne');
                    $docpath = $doc->doc_path;
                }
            } else {
                // documento tiene reemplazos
                if ($dv == 0) {
                    // solicito la versión 0, depende del estado
                    if ($doc->estado_doc == 'V') {
                        // si esta verificado entonces la encuentro en la carpeta 0
                        $verspath = '000/';
                    }
                } else {
                    // solicito una versión de reemplazo, se encuentra en la carpeta de la versión
                    $verspath = str_pad($dv, 3, '0', STR_PAD_LEFT) . '/';
                }
            }

            if (!empty($doc)) {

                $rootpath = env('PATH_DOCUMENTOS_IMPERIUM') . '/' . $docpath . $verspath;
                if (is_dir($rootpath)) {
                    $pattern = $doc->preffix . '*.pdf';
                    $files = glob($rootpath . $pattern);
                    foreach ($files as $f => $file) {
                        $extn = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                        if ($extn == 'pdf') {
                            $fn = basename($file);
                        }
                    }

                    if ($fn == NULL) {
                        $pattern = $doc->preffix . '*.PDF';
                        $files = glob($rootpath . $pattern);
                        foreach ($files as $f => $file) {
                            $extn = pathinfo($file, PATHINFO_EXTENSION);
                            if ($extn == 'PDF') {
                                $fn = basename($file);
                            }
                        }
                    }

                    if ($fn != NULL) {
                        $f_url = env('RUTA_DOCUMENTOS_IMPERIUM') . '/' . $docpath . $verspath . $fn;
                    }
                }
            }
        }
        return $f_url;

    }

    private static function esEx($n)
    {
        return (preg_match('/^[a-z]{2}/', $n) == 1);
    }

    public static function quitarRepetidos($malla_societaria)
    {
        $nuevo = array();
        //$malla_societaria     = SQLConnection::grafoSociedades('20076297534','F');
        for ($i = 0; $i < (count($malla_societaria) - 1); $i++) {
            if ($malla_societaria[$i]->idNodoGrafo != $malla_societaria[$i + 1]->idNodoGrafo) {
                $nuevo[] = $malla_societaria[$i];
            } else {
                if (!self::esEx($malla_societaria[$i]->nombre_persona) and !self::esEx($malla_societaria[$i + 1]->nombre_persona) and $malla_societaria[$i]->seccion != $malla_societaria[$i + 1]->seccion) {
                    $nuevo[] = $malla_societaria[$i];
                } else if (!self::esEx($malla_societaria[$i]->nombre_persona) and self::esEx($malla_societaria[$i + 1]->nombre_persona)) {
                    $nuevo[] = $malla_societaria[$i];
                    $i++;
                } else {
                    $nuevo[] = $malla_societaria[$i + 1];
                    $i++;
                }
            }
        }
        if ($nuevo[count($nuevo) - 1]->nombre_persona != $malla_societaria[count($malla_societaria) - 1]->nombre_persona and $nuevo[count($nuevo) - 1]->seccion != $malla_societaria[count($malla_societaria) - 1]->seccion) {
            $nuevo[] = $malla_societaria[count($malla_societaria) - 1];
        } else if ($nuevo[count($nuevo) - 1]->seccion != $malla_societaria[count($malla_societaria) - 1]->seccion) {
            $nuevo[] = $malla_societaria[count($malla_societaria) - 1];
        } else if ($nuevo[count($nuevo) - 1]->nombre_persona != $malla_societaria[count($malla_societaria) - 1]->nombre_persona) {
            $nuevo[] = $malla_societaria[count($malla_societaria) - 1];
        }
        return $nuevo;
    }

    public static function tieneRepetidos($malla_societaria)
    {
        for ($i = 0; $i < (count($malla_societaria) - 1); $i++) {
            if ($malla_societaria[$i]->idNodoGrafo == $malla_societaria[$i + 1]->idNodoGrafo) {
                return true;
            }
        }
        return false;
    }

    /* FUNCION PARA QUE LE SUME 1+ HORA MAS A LA FECHA */
    public static function unaHoraMas()
    {
        date_default_timezone_set("America/Argentina/Buenos_Aires");
        return date('d M Y H:i:s', strtotime('+1 hour', strtotime(date("d M Y H:i"))));
    }

    /// devolver un Array con las URL de los documentos (el index del array se corresponde con cada doc_version)
    public static function docUrls($doc_id)
    {
        $a_url = [];
        if ($doc_id > 0) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_Datos_Documento', array($doc_id), 'selectOne');
            if (!empty($doc)) {
                if ($doc->estado_doc != 'N') {
                    for ($dv = 0; $dv <= $doc->doc_version; $dv++) {
                        $verspath = ($dv > 0) ? str_pad($dv, 3, '0', STR_PAD_LEFT) . '/' : '';
                        $rootpath = env('PATH_DOCUMENTOS_IMPERIUM') . '/' . $doc->doc_path . $verspath;

                        $f_url = NULL;
                        if (is_dir($rootpath)) {
                            $fn = NULL;
                            $pattern = $doc->preffix . '*.pdf';
                            $files = glob($rootpath . $pattern);
                            foreach ($files as $f => $file) {
                                $extn = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                                if ($extn == 'pdf') {
                                    $fn = basename($file);
                                }
                            }
                            if ($fn != NULL) {
                                $f_url = env('RUTA_DOCUMENTOS_IMPERIUM') . '/' . $doc->doc_path . $verspath . $fn;
                            }
                        }

                        $a_url[] = $f_url;

                    }
                }
            }
        }
        return $a_url;
    }
    // FUNCION GENERICA ENCARGADA DE RECIBIR EL CODIGO DEL PAIS Y DEVOLVER UNA LISTA CON LOS TAX ID QUE TIENE EL PAIS
    public static function identificadoresPais($cc, $tipo_persona = 'T')
    {
        // $ident = DB::select('EXEC dbo.backend_obtener_identificadores_pais '.$cc);
        $ident = SQLConnection::backendStoreProcedure('backend_obtener_identificadores_pais', array($cc, $tipo_persona));

        return $ident;
    }
    // FUNCION GENERICA ENCARGADA DE DEVOLVER LOS PAISES Y SUS CORRESPONDIENTES CODIGOS
    public static function contrapartesPaises()
    {
        $country = SQLConnection::backendStoreProcedure('backend_obtener_paises', array(), 'select');
        return $country;
    }

    /* 
      Funcion para acomodar los resultados de la DB, solo se esta usando para la 
      API Govcheck.
      REQUIERE: $obj = (Objeto y/o resultado DB)
    */
    public static function conversorApisGovcheck($obj)
    {

        $arreglo = array();
        for ($i = 0; $i < count($obj); $i++) {
            $n = new stdClass();
            //-- dni ingresado
            $n->National_id = $obj[$i]->dni;

            //-- nombre, apellido
            $n->Full_name = $obj[$i]->nombre_persona;
            $n->Name = $obj[$i]->nombres;
            $n->Lastname = $obj[$i]->apellidos;

            //-- fecha nac
            $n->DBO = $obj[$i]->fecha_nacimiento;

            //-- cuit/cuil
            $n->Tax_id_type = $obj[$i]->tipo_clave;
            $n->Tax_id_number = $obj[$i]->identificacion;

            //-- fecha defuncion
            $n->DOD = $obj[$i]->fecha_defuncion;

            //-- telefonos
            $tel = explode('/', $obj[$i]->telefonos);
            $n->Phone_number = (count($tel) == 1 && strlen($tel[0]) == 0) ? null : $tel;

            //-- mail
            $n->Email = $obj[$i]->email;

            //-- codigo actividad y nombre
            $n->Activity_code = $obj[$i]->cod_actividad;
            $n->Activity_description = $obj[$i]->nombre_actividad;

            //-- domicilio
            $n->Address = self::limpiaderDomicilioExtend($obj[$i]->domicilio);

            $arreglo[$i] = $n;
        }

        //return $n;    
        return $arreglo;
    }

    public static function conversorApisGovcheckPlus($res_afip, $res_renaper)
    {
        $nuevaRespuesta = new stdClass();

        $nuevaRespuesta->id_main_issue = $res_renaper->ID_TRAMITE_PRINCIPAL;
        $nuevaRespuesta->id_reprint = $res_renaper->ID_TRAMITE_TARJETA_REIMPRESA;
        $nuevaRespuesta->copy = $res_renaper->EJEMPLAR;
        $nuevaRespuesta->issue_date = self::invertirFecha($res_renaper->EMISION);
        $nuevaRespuesta->expiry_date = self::invertirFecha($res_renaper->VENCIMIENTO);
        $nuevaRespuesta->lastname = strtoupper($res_renaper->apellido);
        $nuevaRespuesta->names = strtoupper($res_renaper->nombres);
        $nuevaRespuesta->DOB = self::invertirFecha($res_renaper->fechaNacimiento);
        //$nuevaRespuesta->cuil = $res_renaper->cuil;    
        $nuevaRespuesta->street_name = strtoupper($res_renaper->calle);
        $nuevaRespuesta->street_number = $res_renaper->numero;
        $nuevaRespuesta->floor = strtoupper($res_renaper->piso);
        $nuevaRespuesta->apartment = strtoupper($res_renaper->departamento);
        $nuevaRespuesta->zip = strtoupper($res_renaper->cpostal);
        $nuevaRespuesta->neighborhood = strtoupper($res_renaper->barrio);
        $nuevaRespuesta->monobloc = strtoupper($res_renaper->monoblock);
        $nuevaRespuesta->city = strtoupper($res_renaper->ciudad);
        $nuevaRespuesta->town = strtoupper($res_renaper->municipio);
        $nuevaRespuesta->state = strtoupper($res_renaper->provincia);
        $nuevaRespuesta->country = strtoupper($res_renaper->pais);
        $nuevaRespuesta->death_notice = $res_renaper->mensaf;

        $fclat = self::invertirFecha($res_renaper->fechaf);
        $nuevaRespuesta->DOD = ($fclat == '') ? $res_renaper->fechaf : $fclat;
        //$nuevaRespuesta->DOD = self::invertirFecha($res_renaper->fechaf);
        $nuevaRespuesta->citizen_id = $res_renaper->idciudadano;
        $nuevaRespuesta->nationality = strtoupper($res_renaper->nacionalidad);
        $nuevaRespuesta->place_of_birth = strtoupper($res_renaper->lugar_nacimiento);
        $nuevaRespuesta->taxid = $res_renaper->identificacion;
        $nuevaRespuesta->gender = strtoupper($res_renaper->sexo);
        $nuevaRespuesta->national_id = $res_renaper->dni;

        // res_afip
        //-- cuit/cuil
        $nuevaRespuesta->Tax_id_type = $res_afip->tipo_clave;
        $nuevaRespuesta->Tax_id_number = $res_afip->identificacion;

        //-- telefonos
        $tel = explode('/', $res_afip->telefonos);
        $nuevaRespuesta->Phone_number = (count($tel) == 1 && strlen($tel[0]) == 0) ? null : $tel;

        //-- mail
        $nuevaRespuesta->Email = $res_afip->email;

        //-- codigo actividad y nombre
        $nuevaRespuesta->Activity_code = $res_afip->cod_actividad;
        $nuevaRespuesta->Activity_description = $res_afip->nombre_actividad;

        //-- domicilio
        $nuevaRespuesta->Address = self::limpiaderDomicilioExtend($res_afip->domicilio);

        return $nuevaRespuesta;

    }


    //--------------------------------------------------------  SISTEMAS DE NOTIFICACION POR MAIL APIS  ---------------------------------------------------------------//
    //Método para el envio de emails errores
    public static function enviarMail_errores_api($content = '')
    {
        Mailer::from("no-reply@fidelitas.com.ar");
        Mailer::to(env('DESTINATARIO'));
        //Mailer::bcc(env('COPIA')); 
        Mailer::text($content, "API STATUS");
        return Mailer::send();
    }
    //--------------------------------------------------------  FIN SISTEMAS DE NOTIFICACION POR MAIL  ----------------------------------------------------------------//

    /* 
      Funcion Booleana que retorn False si el parametro ingresado no contine solo
      numaros y es menor a longitud 7 y/o mayor a longitud 8.
    */
    public static function noEsPosibleDni($dni)
    {
        return (preg_match('/^[0-9]{7,8}$/', $dni) != 1);
    }

    /* 
      Funcion Booleana que retorn False si el parametro ingresado no contine solo
      numaros y es menor a longitud 7 y/o mayor a longitud 8.
    */
    public static function noEsPosibleCuit($tax_id)
    {
        return (preg_match('/^[0-9]{11}$/', $tax_id) != 1);
    }

    /*
      Funcion para gestionar las notificaciones y codigo de error para
      Govcheck
    */
    public static function gestorNotificacionGovcheck($obj)
    {
        if (count($obj) > 1) {
            return array('code' => '201', 'message' => 'Documento duplicado.');
        } else if (count($obj) == 0 || is_null($obj)) {
            return array('code' => '300', 'message' => 'Sin datos.');
        } else {
            return array('code' => '100', 'message' => 'Ok.');
        }
    }

    /* 
      Funcion para devolver la diferencia en meses de una fecha pasada como parametro
      y la actual que genera la funcion.
      REQUIERE: $fecha = '2022-04-12 00:30:00'
    */
    public static function cantidadMeses($fecha)
    {
        $hoy = new DateTime("now");
        $fecha = date_create($fecha);
        $diferencia = date_diff($fecha, $hoy);
        return $diferencia->m;
    }

    public static function conversorApisExtended($obj, $res_renaper, $res_ws)
    {
        $n = new stdClass();
        $n2 = new stdClass();
        $n3 = new stdClass();
        //-- dni ingresado
        $n->National_id = $obj[0]->dni;

        //-- nombre, apellido
        $n->Full_name = $obj[0]->nombre_persona;
        $n->Name = $obj[0]->nombres;
        $n->Lastname = $obj[0]->apellidos;

        //-- fecha nac
        $n->DBO = $obj[0]->fecha_nacimiento;

        //-- cuit/cuil
        $n->Tax_id_type = $obj[0]->tipo_clave;
        $n->Tax_id_number = $obj[0]->identificacion;

        //-- fecha defuncion
        $n->DOD = $obj[0]->fecha_defuncion;

        //-- telefonos
        $tel = explode('/', $obj[0]->telefonos);
        $n->Phone_number = (count($tel) == 1 && strlen($tel[0]) == 0) ? null : $tel;

        //-- mail
        $emails = explode('/', $obj[0]->email);
        //$n->Email = $obj[0]->email;
        $n->Email = (count($emails) == 1 && strlen($emails[0]) == 0) ? null : $emails;

        //-- codigo actividad y nombre
        $n->Activity_code = $obj[0]->cod_actividad;
        $n->Activity_description = $obj[0]->nombre_actividad;

        //-- domicilio
        $n->Address = self::limpiaderDomicilioExtend($obj[0]->domicilio);

        //-- nacionalidad
        $n3->Nationality = $obj[0]->nacionalidad;

        //-- genero
        $n3->Gender = (is_null($res_renaper)) ? $obj[0]->genero : $res_renaper->sexo;

        //-- codigos del dni
        if (is_null($res_renaper)) {
            $n3->Issue_date = $obj[0]->fecha_emision;
            $n3->Expiry_date = $obj[0]->fecha_vencimiento;
            $n3->Internal_id = $obj[0]->nro_tramite;
            $n3->Copy = $obj[0]->version_dni;
        } else {
            $fe = explode('/', $res_renaper->EMISION);
            $fe = $fe[2] . '-' . $fe[1] . '-' . $fe[0];
            $n3->Issue_date = $fe;

            $fv = explode('/', $res_renaper->VENCIMIENTO);
            $fv = $fv[2] . '-' . $fv[1] . '-' . $fv[0];
            $n3->Expiry_date = $fv;

            $n3->Internal_id = $res_renaper->ID_TRAMITE_PRINCIPAL;
            $n3->Copy = $res_renaper->EJEMPLAR;
        }

        $n3->Fidecheck = $res_ws;

        return array('Govcheck' => $n, 'Extended' => $n3);
    }

    #Conversor de respusta del extended_V3
    #En esta version los datos de renaper se devuelven con el match true o false -TB
    #08-05-2024
    public static function conversorApisExtended_v3($obj, $res_renaper, $res_ws, $nationality, $gender, $issue_date, $expiry_date, $internal_id, $copy)
    {
        $n = new stdClass();
        $n2 = new stdClass();
        $n3 = new stdClass();
        //-- dni ingresado
        $n->National_id = $obj[0]->dni;
        $n->Nationality = ($obj[0]->nacionalidad == 'ARGENTINA') ? 'ARGENTINA' : 'EXTRANJERO';

        //-- nombre, apellido
        $n->Full_name = $obj[0]->nombre_persona;
        $n->Name = $obj[0]->nombres;
        $n->Lastname = $obj[0]->apellidos;

        //-- fecha nac
        $n->DBO = $obj[0]->fecha_nacimiento;

        //-- cuit/cuil
        $n->Tax_id_type = $obj[0]->tipo_clave;
        $n->Tax_id_number = $obj[0]->identificacion;

        //-- fecha defuncion
        $n->DOD = $obj[0]->fecha_defuncion;

        //-- telefonos
        $tel = explode('/', $obj[0]->telefonos);
        $n->Phone_number = (count($tel) == 1 && strlen($tel[0]) == 0) ? null : $tel;

        //-- mail
        $emails = explode('/', $obj[0]->email);
        //$n->Email = $obj[0]->email;
        $n->Email = (count($emails) == 1 && strlen($emails[0]) == 0) ? null : $emails;

        //-- codigo actividad y nombre
        $n->Activity_code = $obj[0]->cod_actividad;
        $n->Activity_description = $obj[0]->nombre_actividad;

        //-- domicilio
        $n->Address = self::limpiaderDomicilioExtend($obj[0]->domicilio);

        #Se comento la nacionalidad para que no salga en la respuesta del api
        //-- nacionalidad
        #$n3->Nationality = $obj[0]->nacionalidad;
        #$n3->Nationality = ($obj[0]->nacionalidad == ($nationality || strtoupper($nationality))) ? TRUE : FALSE;    

        //-- genero
        $n3->Gender = !empty($gender) ? (($obj[0]->genero == $gender) ? TRUE : FALSE) : '';

        //-- codigos del dni
        if (is_null($res_renaper)) {
            $n3->Issue_date = !empty($issue_date) ? (($obj[0]->fecha_emision == $issue_date) ? TRUE : FALSE) : '';
            $n3->Expiry_date = !empty($expiry_date) ? (($obj[0]->fecha_vencimiento == $expiry_date) ? TRUE : FALSE) : '';
            $n3->Internal_id = !empty($internal_id) ? (($obj[0]->nro_tramite == $internal_id) ? TRUE : FALSE) : '';
            $n3->Copy = !empty($copy) ? (($obj[0]->version_dni == $copy) ? TRUE : FALSE) : '';
        } else {
            $fe = explode('/', $res_renaper->EMISION);
            $fe = $fe[2] . '-' . $fe[1] . '-' . $fe[0];
            $n3->Issue_date = !empty($issue_date) ? (($fe == $issue_date) ? TRUE : FALSE) : '';

            $fv = explode('/', $res_renaper->VENCIMIENTO);
            $fv = $fv[2] . '-' . $fv[1] . '-' . $fv[0];
            $n3->Expiry_date = !empty($expiry_date) ? (($fv == $expiry_date) ? TRUE : FALSE) : '';

            $n3->Internal_id = !empty($internal_id) ? (($res_renaper->ID_TRAMITE_PRINCIPAL == $internal_id) ? TRUE : FALSE) : '';

            $n3->Copy = !empty($copy) ? (($res_renaper->EJEMPLAR == $copy) ? TRUE : FALSE) : '';
        }

        $n3->Fidecheck = $res_ws;

        return array('Govcheck' => $n, 'Extended' => $n3);
    }

    /*
    ESTA ES UNA FUNCION QUE SE ARMO PARA RESOLVER UN PROBLEMA QUE EXISTIA CON ESA RAZON SOCIAL,
    SE MAREA AL MOMENTO DE BUSCAR LEGALES
    */
    public static function parche_cla($rs)
    {
        if (self::rs_conflictiva($rs)) {
            $rs = explode(' ', $rs);
            foreach ($rs as $key) {
                if (strlen($key) >= 3) {
                    return $key;
                }
            }
            return "";
        }
        return $rs;
    }

    //-- DENTRO DEL ARRAY 'rs_problematicas' SE DEBEN AGREGAR LAS QUE GENEREN ALGUN INCONVENIENTES PARA ARMAR LA SECCION JUDICIALES, LEGALES, ETC.
    static function rs_conflictiva($rs)
    {
        $rs_problematicas = array('"RIVA S.A.I.I.C.F.A - ELEPRINT - TECMA - INSA U. T. E."', '"C & C INFORMATICOS"');

        foreach ($rs_problematicas as $key) {
            if ($key == $rs) {
                return true;
            }
        }
        return false;
    }

    //Método para el envio de emails errores
    public static function enviarMail_errores($to = '', $bcc = '', $content = '', $subject = "Fidelitas")
    {
        Mailer::from("no-reply@fidelitas.com.ar");
        Mailer::to($to);
        Mailer::bcc($bcc);
        Mailer::text($content, $subject);
        return Mailer::send();
    }

    /*
      Funcion encargada de tomar las direcciones devueltas por la DB en un solo String
      la parsea y la clasifica en orden (E electoral = indice 0, L legal = indice = 1, F fiscal = indice 2)
      colocandolos todos dentro de un array.
      Luego retorna el primero que no encuentre null
      REQUIERE: $domicilio = String > 0
    */
    public static function limpiaderDomicilioExtend($domicilios)
    {
        $domicilios = explode('/', $domicilios);
        $res = array();

        if (count($domicilios) == 1) {
            return explode('|', $domicilios[0])[0];
        }

        for ($i = 0; $i < count($domicilios); $i++) {
            $t = explode('|', $domicilios[$i]);
            if ($t[1] == 'E') {
                $res[0] = $t[0];
            } else if ($t[1] == 'L') {
                $res[1] = $t[0];
            } else if ($t[1] == 'F') {
                $res[2] = $t[0];
            }
        }
        //echo(var_dump($res)); die();
        for ($i = 0; $i < count($res); $i++) {
            if (isset($res[$i]) && !is_null($res[$i])) {
                return $res[$i];
            }
        }
        return null;
    }

    public static function esElMismoNombre($n1, $n2)
    {
        if (count($n1) == count($n2)) {
            $cont = 0;
            foreach ($n1 as $e) {
                foreach ($n2 as $a) {
                    if ($e == $a) {
                        $cont++;
                    }
                }
            }
            return $cont == count($n1);
        }
        return false;
    }

    //-- $n1 == Nombre pasado como parametro y $n2 es el nombre que retorna ws.
    public static function esElMismoNombre_BackUo($n1, $n2)
    {
        $n1 = explode(' ', trim(strtoupper($n1)));
        $n2 = explode(' ', trim(strtoupper($n2)));

        if (count($n1) <= count($n2)) {
            $cont = 0;
            foreach ($n1 as $e) {
                foreach ($n2 as $a) {
                    if ($e == $a) {
                        $cont++;
                        break;
                    }
                }
            }
            //return $cont == count($n1);
            if ($cont > 1 and $cont <= count($n1)) {
                return true;
            }
            return false;
        }
        return false;
    }

    //-- $n1 == Nombre pasado como parametro y $n2 es el nombre que retorna ws.
    public static function esElMismoNombreWs($n1, $n2)
    {
        $n1 = explode(' ', trim(strtoupper(self::limpiarCaracteresEspeciales($n1))));
        $n2 = explode(' ', trim(strtoupper(self::limpiarCaracteresEspeciales($n2))));
        $cantidad = 0;

        foreach ($n1 as $e) {
            foreach ($n2 as $i) {
                if ($e == $i) {
                    $cantidad++;
                    break;
                }
            }
        }

        return $cantidad == count($n1);
    }



    //-----------------------------  SECCION PARA API SOLO RENAPER  -----------------------------------------------------------------------//
    public static function conversorApisSoloRenaper($obj, $res_renaper)
    {
        $n3 = new stdClass();
        //-- nacionalidad
        $n3->Nationality = $obj[0]->nacionalidad;

        //-- genero
        $n3->Gender = (is_null($res_renaper)) ? $obj[0]->genero : $res_renaper->sexo;

        //-- codigos del dni
        if (is_null($res_renaper)) {
            $n3->Issue_date = $obj[0]->fecha_emision;
            $n3->Expiry_date = $obj[0]->fecha_vencimiento;
            $n3->Internal_id = $obj[0]->nro_tramite;
            $n3->Copy = $obj[0]->version_dni;
        } else {
            $fe = explode('/', $res_renaper->EMISION);
            $fe = $fe[2] . '-' . $fe[1] . '-' . $fe[0];
            $n3->Issue_date = $fe;

            $fv = explode('/', $res_renaper->VENCIMIENTO);
            $fv = $fv[2] . '-' . $fv[1] . '-' . $fv[0];
            $n3->Expiry_date = $fv;

            $n3->Internal_id = $res_renaper->ID_TRAMITE_PRINCIPAL;
            $n3->Copy = $res_renaper->EJEMPLAR;
        }

        return array('Renaper' => $n3);
    }

    public static function manejadorFechaEmision($fechaRecivida)
    {
        if (preg_match('/^[0-9]{1,4}[\/]{1}[0-9]{1,2}[\/]{1}[0-9]{1,4}$/', $fechaRecivida) == 1) {
            $fechaRecivida = explode('/', $fechaRecivida);
        } else if (preg_match('/^[0-9]{1,4}[-]{1}[0-9]{1,2}[-]{1}[0-9]{1,4}$/', $fechaRecivida) == 1) {
            $fechaRecivida = explode('-', $fechaRecivida);
        } else {
            $fechaRecivida = '';
        }
        return self::normalizadorFechaSoloRenaper($fechaRecivida);
    }

    static function normalizadorFechaSoloRenaper($fechaRecivida)
    {
        try {
            $nuevaFecha = '';
            if (strlen($fechaRecivida[0]) == 4) {
                $anio = $fechaRecivida[0];
                $mes = (strlen($fechaRecivida[1]) == 2) ? $fechaRecivida[1] : '0' . $fechaRecivida[1];
                $dia = (strlen($fechaRecivida[2]) == 2) ? $fechaRecivida[2] : '0' . $fechaRecivida[2];
                $nuevaFecha = $dia . '/' . $mes . '/' . $anio;
            } else {
                $anio = $fechaRecivida[2];
                $mes = (strlen($fechaRecivida[1]) == 2) ? $fechaRecivida[1] : '0' . $fechaRecivida[1];
                $dia = (strlen($fechaRecivida[0]) == 2) ? $fechaRecivida[0] : '0' . $fechaRecivida[0];
                $nuevaFecha = $dia . '/' . $mes . '/' . $anio;
            }
            if (preg_match('/^[0-9]{2}[\/]{1}[0-9]{2}[\/]{1}[0-9]{4}$/', $nuevaFecha) == 1) {
                return $nuevaFecha;
            }
            return '';
        } catch (\Throwable $th) {
            return '';
        }
    }

    static function invertirFecha($fecha)
    {
        if (preg_match('/^[0-9]{2}[\/]{1}[0-9]{2}[\/]{1}[0-9]{4}$/', $fecha) == 1) {
            $fecha = explode('/', $fecha);
            return $fecha[2] . '-' . $fecha[1] . '-' . $fecha[0];
        }
        return '';
    }

    static function normalizadorGenero($generoRecibido)
    {
        $generoRecibido = strtoupper($generoRecibido);
        if (preg_match('/^[A-Z]{1}$/', $generoRecibido) == 1) {
            return $generoRecibido;
        }
        return '';
    }

    static function formatoRespuestaRenaper($res_renaper, $dni, $fechaParaValidar, $generoParaValidar, $fecha_emision_recivida, $fecha_expiracion_emitida, $copia, $idMainIssue)
    {
        $nuevaRespuesta = new stdClass();

        $nuevaRespuesta->id_main_issue = ($res_renaper->ID_TRAMITE_PRINCIPAL == $idMainIssue) ? 'TRUE' : 'FALSE';
        $nuevaRespuesta->id_reprint = "";
        $nuevaRespuesta->copy = ($res_renaper->EJEMPLAR == $copia) ? 'TRUE' : 'FALSE';
        $nuevaRespuesta->issue_date = (self::invertirFecha($res_renaper->EMISION) == $fecha_emision_recivida) ? 'TRUE' : 'FALSE';
        $nuevaRespuesta->expiry_date = (self::invertirFecha($res_renaper->VENCIMIENTO) == $fecha_expiracion_emitida) ? 'TRUE' : 'FALSE';
        $nuevaRespuesta->lastname = strtoupper($res_renaper->apellido);
        $nuevaRespuesta->names = strtoupper($res_renaper->nombres);
        $nuevaRespuesta->DOB = self::invertirFecha($res_renaper->fechaNacimiento);
        //$nuevaRespuesta->cuil = $res_renaper->cuil;
        $nuevaRespuesta->street_name = strtoupper($res_renaper->calle);
        $nuevaRespuesta->street_number = $res_renaper->numero;
        $nuevaRespuesta->floor = strtoupper($res_renaper->piso);
        $nuevaRespuesta->apartment = strtoupper($res_renaper->departamento);
        $nuevaRespuesta->zip = strtoupper($res_renaper->cpostal);
        $nuevaRespuesta->neighborhood = "";
        $nuevaRespuesta->monobloc = "";
        $nuevaRespuesta->city = strtoupper($res_renaper->ciudad);
        $nuevaRespuesta->town = strtoupper($res_renaper->municipio);
        $nuevaRespuesta->state = strtoupper($res_renaper->provincia);
        $nuevaRespuesta->country = strtoupper($res_renaper->pais);
        $nuevaRespuesta->death_notice = $res_renaper->mensaf;
        $fclat = self::invertirFecha($res_renaper->fechaf);
        $nuevaRespuesta->DOD = ($fclat == '') ? $res_renaper->fechaf : $fclat;
        //$nuevaRespuesta->DOD = self::invertirFecha($res_renaper->fechaf);
        $nuevaRespuesta->citizen_id = "";
        $nuevaRespuesta->nationality = strtoupper($res_renaper->nacionalidad);
        $nuevaRespuesta->place_of_birth = "";
        $nuevaRespuesta->taxid = $res_renaper->identificacion;
        $nuevaRespuesta->gender = strtoupper($res_renaper->sexo);
        $nuevaRespuesta->national_id = $res_renaper->dni;
        $nuevaRespuesta->national_id_validation = ($res_renaper->dni == $dni) ? 'TRUE' : 'FALSE';
        $nuevaRespuesta->issue_date_validation = ($res_renaper->EMISION == $fechaParaValidar) ? 'TRUE' : 'FALSE';
        $nuevaRespuesta->gender_validation = ($res_renaper->sexo == $generoParaValidar) ? 'TRUE' : 'FALSE';

        return $nuevaRespuesta;
    }

    static function formatoRespuestaRenaper_v3($res_renaper, $dni, $fechaParaValidar, $generoParaValidar, $fecha_emision_recivida, $fecha_expiracion_emitida, $copia, $idMainIssue, $DOB)
    {

        $nuevaRespuesta = new stdClass();
        #Parametros obligatorios
        $nuevaRespuesta->national_id = $res_renaper->dni;
        $nuevaRespuesta->gender = ($res_renaper->sexo == $generoParaValidar) ? 'TRUE' : 'FALSE';

        #Parametros opcionales
        $nuevaRespuesta->id_main_issue = (!empty($idMainIssue) ? (($res_renaper->ID_TRAMITE_PRINCIPAL == $idMainIssue) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->copy = (!empty($copia) ? (($res_renaper->EJEMPLAR == $copia) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->issue_date = (!empty($fecha_emision_recivida) ? (strtotime(self::invertirFecha($res_renaper->EMISION)) == strtotime($fecha_emision_recivida) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->expiry_date = (!empty($fecha_expiracion_emitida) ? (strtotime(self::invertirFecha($res_renaper->VENCIMIENTO)) == strtotime($fecha_expiracion_emitida) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->DOB = (!empty($DOB) ? (($res_renaper->fechaNacimiento == $DOB) ? 'TRUE' : 'FALSE') : '');

        return $nuevaRespuesta;
    }

    static function formatoRespuestaRenaper_v4(
        $res_renaper, 
        $dni, 
        $fechaParaValidar, 
        $generoParaValidar, 
        $fecha_emision_recivida, 
        $fecha_expiracion_emitida, 
        $copia, 
        $idMainIssue, 
        $tax_id_type, 
        $antiguedad_situacion_1, 
        $fechaDefuncion,
        $ultima_formateada,
        $maxima_formateada,
        $chequesRechazados,
        $cantidadBancosUnicos
    ){
        $nuevaRespuesta = new stdClass(); // Validates TRUE or FALSE for certain variables
        $nuevaRespuesta2 = new stdClass(); // Returns data without TRUE or FALSE verification

        // Parametros Importantes    
        $nuevaRespuesta2->national_id = isset($res_renaper->dni) ? $res_renaper->dni : '';
        $nuevaRespuesta2->tax_id = isset($res_renaper->cuil) ? $res_renaper->cuil : '';
        $nuevaRespuesta2->tax_id_type = $tax_id_type;
        $nuevaRespuesta2->Name = isset($res_renaper->nombres) ? $res_renaper->nombres : '';
        $nuevaRespuesta2->Lastname = isset($res_renaper->apellido) ? $res_renaper->apellido : '';
        
        $nuevaRespuesta2->sit_1_since = isset($antiguedad_situacion_1) ? $antiguedad_situacion_1 : "";
        $nuevaRespuesta2->banks = isset($cantidadBancosUnicos) ? $cantidadBancosUnicos : "";
        $nuevaRespuesta2->last_position = isset($ultima_formateada) ? $ultima_formateada : "";
        $nuevaRespuesta2->highest_position = isset($maxima_formateada) ? $maxima_formateada : "";
        $nuevaRespuesta2->rejected_checks = isset($chequesRechazados) ? $chequesRechazados : "";        

        $objetoFechaNacimiento = DateTime::createFromFormat('d/m/Y', $res_renaper->fechaNacimiento);
        $fecha_nacimiento = $objetoFechaNacimiento->format('Y-m-d');
        $nuevaRespuesta2->DOB = !empty($fecha_nacimiento) && isset($fecha_nacimiento) ? $fecha_nacimiento : '';

        /*  $objetoFechaFallecido = DateTime::createFromFormat('d/m/Y', $fechaDefuncion);    
         $$fechaDefuncion = $objetoFechaFallecido->format('Y-m-d');    */
        $nuevaRespuesta2->DOD = !empty($fechaDefuncion) && !is_null($fechaDefuncion) ? $fechaDefuncion : '';

        // Detalles de domicilio
        $nuevaRespuesta2->nationality = isset($res_renaper->nacionalidad) ? ((strtoupper($res_renaper->nacionalidad) == 'ARGENTINA') ? $res_renaper->nacionalidad : 'EXTRANJERO') : '';
        $nuevaRespuesta2->street_name = isset($res_renaper->calle) ? $res_renaper->calle : '';
        $nuevaRespuesta2->street_number = isset($res_renaper->numero) ? $res_renaper->numero : '';
        $nuevaRespuesta2->floor = isset($res_renaper->piso) ? $res_renaper->piso : '';
        $nuevaRespuesta2->apartment = isset($res_renaper->departamento) ? $res_renaper->departamento : '';
        $nuevaRespuesta2->zip = isset($res_renaper->cpostal) ? $res_renaper->cpostal : '';
        $nuevaRespuesta2->city = isset($res_renaper->ciudad) ? $res_renaper->ciudad : '';
        $nuevaRespuesta2->state = isset($res_renaper->provincia) ? $res_renaper->provincia : '';
        $nuevaRespuesta2->country = isset($res_renaper->pais) ? $res_renaper->pais : '';

        // Validacion de genero
        $nuevaRespuesta->gender = (isset($res_renaper->sexo) && $res_renaper->sexo == $generoParaValidar) ? true : false;

        // Validacion de parametros opcionales
        #$nuevaRespuesta->id_main_issue = !empty($idMainIssue) ? (($res_renaper->ID_TRAMITE_PRINCIPAL == $idMainIssue) ? 'TRUE' : 'FALSE') : '';
        $nuevaRespuesta->id_main_issue = (isset($res_renaper->ID_TRAMITE_PRINCIPAL)) ? (!empty($idMainIssue) ? (($res_renaper->ID_TRAMITE_PRINCIPAL == $idMainIssue) ? true : false) : '') : '';

        #$nuevaRespuesta->copy = !empty($copia) ? (($res_renaper->EJEMPLAR == $copia) ? 'TRUE' : 'FALSE') : '';    
        $nuevaRespuesta->copy = (isset($res_renaper->EJEMPLAR)) ? (!empty($copia) ? (($res_renaper->EJEMPLAR == $copia) ? true : false) : '') : '';

        #$nuevaRespuesta->issue_date = !empty($fecha_emision_recivida) ? (strtotime(self::invertirFecha($res_renaper->EMISION)) == strtotime($fecha_emision_recivida) ? 'TRUE' : 'FALSE') : '';

        $nuevaRespuesta->issue_date = (isset($res_renaper->EMISION)) ? (!empty($fecha_emision_recivida) ? (strtotime(self::invertirFecha($res_renaper->EMISION)) == strtotime($fecha_emision_recivida) ? true : false) : '') : '';

        #$nuevaRespuesta->expiry_date = !empty($fecha_expiracion_emitida) ? (strtotime(self::invertirFecha($res_renaper->VENCIMIENTO)) == strtotime($fecha_expiracion_emitida) ? 'TRUE' : 'FALSE') : '';    

        $nuevaRespuesta->expiry_date = (isset($res_renaper->VENCIMIENTO)) ? (!empty($fecha_expiracion_emitida) ? (strtotime(self::invertirFecha($res_renaper->VENCIMIENTO)) == strtotime($fecha_expiracion_emitida) ? true : false) : '') : '';

        #$nuevaRespuesta->DOB = !empty($DOB) ? (($res_renaper->fechaNacimiento == $DOB) ? 'TRUE' : 'FALSE') : '';

        //$nuevaRespuesta->DOB = (isset($res_renaper->fechaNacimiento)) ? (!empty($DOB) ? (($res_renaper->fechaNacimiento == $DOB) ? 'TRUE' : 'FALSE') : '') : '';
        $formateoFinal = [$nuevaRespuesta, $nuevaRespuesta2];

        return $formateoFinal;
    }

    static function formatoRespuestaRenaper_v5($res_renaper, $dni, $fechaParaValidar, $generoParaValidar, $fecha_emision_recivida, $fecha_expiracion_emitida, $copia, $idMainIssue, $DOB, $tax_id_type, $antiguedad_situacion_1)
    {
        $nuevaRespuesta = new stdClass(); #Se encarga de la validacion a TRUE o FALSE de ciertas variables
        $nuevaRespuesta2 = new stdClass();  #Devuelve datos sin la verificacion de TRUE o FALSE
        #Parametros obligatorios      
        $nuevaRespuesta2->national_id = $res_renaper->dni;
        $nuevaRespuesta2->surname = (!empty($res_renaper) && isset($res_renaper->apellido)) ? strtoupper($res_renaper->apellido) : '';
        $nuevaRespuesta2->name = (!empty($res_renaper) && isset($res_renaper->nombres)) ? strtoupper($res_renaper->nombres) : '';
        $nuevaRespuesta2->tax_id = $res_renaper->cuil;
        $nuevaRespuesta2->tax_id_type = $tax_id_type;
        $nuevaRespuesta2->sit_1_since = isset($antiguedad_situacion_1) ? $antiguedad_situacion_1 : "";
        $nuevaRespuesta2->DOD = "";

        $nuevaRespuesta->gender = ($res_renaper->sexo == $generoParaValidar) ? 'TRUE' : 'FALSE';
        #Parametros opcionales
        $nuevaRespuesta->id_main_issue = (!empty($idMainIssue) ? (($res_renaper->ID_TRAMITE_PRINCIPAL == $idMainIssue) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->copy = (!empty($copia) ? (($res_renaper->EJEMPLAR == $copia) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->issue_date = (!empty($fecha_emision_recivida) ? (strtotime(self::invertirFecha($res_renaper->EMISION)) == strtotime($fecha_emision_recivida) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->expiry_date = (!empty($fecha_expiracion_emitida) ? (strtotime(self::invertirFecha($res_renaper->VENCIMIENTO)) == strtotime($fecha_expiracion_emitida) ? 'TRUE' : 'FALSE') : '');
        $nuevaRespuesta->DOB = (!empty($DOB) ? (($res_renaper->fechaNacimiento == $DOB) ? 'TRUE' : 'FALSE') : '');

        $formateoFinal = [$nuevaRespuesta, $nuevaRespuesta2];

        return $formateoFinal;

    }


    //--  FUNCION HEREDADA PARA LIMPIAR CARACTERES  'EN USO'  --//
    static function limpiarCaracteresEspeciales($string)
    {
        $string = htmlentities($string);
        $string = preg_replace('/\&(.)[^;]*;/', '\\1', $string);
        $textoLimpio = preg_replace('([^A-Za-z0-9 .,\(\)áéíóúÁÉÍÓÚñÑ\-\:])', '', $string);
        return $textoLimpio;
    }


    /**
     *Fucion que retorn M o F segun un cuit.
     *Valida por medio de una expresion regular en base al siguiente criterio
     *Si comienza con 20 o 23, retorna M
     *Si comienza con 27 o 24, retorna F
     *REQUIERE: $cuit = (numerico) == 11 digitos
     */
    public static function posibleGenero($cuit)
    {
        if ((preg_match('/^[2]{1}[0|3]/', $cuit) == 1)) {
            return 'M';
        }
        return 'F';
    }

    /**
     * Funcion que formatea las fechas
     * @access public
     * @param string|DateTime|null la fecha recibida
     * @param null|string en que formato sera devuelta , si es null devuelve el objeto
     * @return string|DateTime
     */
    public static function obtenerFechaLocal($fecha = null, $formato = null)
    {
        $resultado = null;
        //
        if (!is_null($fecha)) {
            // si no es datetime object , lo transforma
            if (!is_object($fecha)) {
                $fecha = new DateTime($fecha);
            }
            //
            $timezone = new DateTimeZone(Session::get('usuario')->timezone);
            //
            $timestamp = $fecha->format('U');
            $fecha->setTimeZone($timezone);
            $fecha->setTimestamp($timestamp);
            //
            if (!is_null($formato)) {
                $resultado = $fecha->format($formato);
            } else {
                $resultado = $fecha;
            }
        }
        //
        return $resultado;
    }

    // ============================================== //
    // ================ OBTENER TEAM ================ //
    // ============================================== //

    /**
     * Función que devuelve
     * el team default de la
     * familia, en caso que no haya
     * team default devuelve NULL
     * @access public
     * @static
     * @param string|int id de familia
     * @return int|null el id de team default o NULL
     */
    public static function obtenerTeamDefaultFamilia($familia)
    {
        $team_default = SQLConnection::backendStoreProcedure('LN_Teams_', array('DEFAULTTEAMFAMILIA', Session::get('usuario')->user_id, null, null, null, null, null, null, null, null, null, null, $familia), 'selectOne');
        return $team_default;
    }
    // ================================================================================== //
    // ============= CALCULO DE FECHA DE INICIO Y COMPROMEIDA DE UN INFORME ============= //
    // ================================================================================== //

    /**
     * Funcion que devuelve las fechas del informe en base a la duracion
     * de su modelo
     * @access public
     * @param string|null duracion del informe
     * @return array
     *
     */
    public static function establecerFechasInforme($duracion_informe)
    {
        $fecha_inicio = self::obtenerFechaInicioInforme(); // calculamos la fecha de incio    
        $fecha_comprometida = self::obtenerFechaComprometidaInforme($duracion_informe, $fecha_inicio); // calculamos la fecha comprometida del informe

        $fecha_comprometida = self::omitirFeriados($fecha_inicio, $fecha_comprometida); // se omiten los feriados    

        return [
            'fecha_inicio' => ($fecha_inicio->format('Y-m-d H:i:s')),
            'fecha_comprometida' => ($fecha_comprometida->format('Y-m-d H:i:s'))
        ];
    }
    /**
     * Funcion que establece la fecha de inicio del informe
     * @access private
     * @return DateTime objeto del tiempo de la fecha de inicio
     */
    private static function obtenerFechaInicioInforme()
    {
        $fecha = new DateTime();
        $intervalo_dia = new \DateInterval('P1D');  // intervalo de un dia
        $horario_corte = 14;
        $hora = intval($fecha->format('H'));

        //
        if ($hora >= $horario_corte) {
            // Si el informe entra despues del horario de corte 
            // se pasa para que comienze el dia siguiente
            // a las 9
            $fecha->add($intervalo_dia);
            $fecha->setTime(9, 0);
        } else {
            // Si el informe entra antes del horario de corte 
            if ($hora < 9) {
                // y antes de las 9 (antes del comienzo de la jornada laboral) 
                // comienza a las 9 del mismo dia
                $fecha->setTime(9, 0);
            } else {
                // Si el informe entra despues de las 9 (despues del comienzo de la jornada laboral) 
                // comienza al horario de corte del mismo dia
                $fecha->setTime($horario_corte, 0);
            }

        }
        // se valida que no caiga un sabado ni domingo
        $dia_semana = $fecha->format('w');
        if ($dia_semana == '6') {
            // sabado
            $fecha->add(new \DateInterval('P2D'));
        } elseif ($dia_semana == '0') {
            // domingo
            $fecha->add($intervalo_dia);
        }
        //
        return $fecha;
    }


    /**
     * Funcion que establece la fecha de comprometida del informe
     * @access private
     * @param string|null duracion del informe
     * @param DateTime arreglo de fechas feriados proximos, $fecha->add devuelve DateTime
     * @return DateTime objeto del tiempo de la fecha de inicio
     */
    private static function obtenerFechaComprometidaInforme($duracion, $fecha_inicio)
    {
        $fecha = clone $fecha_inicio; // clono el objeto del fecha de inicio para obtener uno nuevo
        $fecha->setTime(23, 59, 59); // setea la hora comprometida al final del dia
        $intervalo_dia = new \DateInterval('P1D'); // intervalo de un dia
        // $hora = intval($fecha_inicio->format('H')); // hora de la fecha comprometida
        $hora = intval((new DateTime())->format('H'));
        $dia_semana = NULL;
        //
        if ($duracion && is_numeric($duracion) && intval($duracion) > 0) {
            // sumamos dia a dia para evaluar si cae algun fin de semana
            $fecha->sub($intervalo_dia);
            for ($i = 0; $i < $duracion; $i++) {
                $fecha->add($intervalo_dia);
                $dia_semana = $fecha->format('w');
                if ($dia_semana == '6') {
                    // sabado
                    $fecha->add(new \DateInterval('P2D'));
                } elseif ($dia_semana == '0') {
                    // domingo
                    $fecha->add($intervalo_dia);
                }
            }
            // le restamos un dia (para que el dia de inicio este integrado en el calculo de duracion)
            // if ( $hora < 14 ){
            // $fecha->sub($intervalo_dia);
            // }
        } else {
            // caso de duracion invalida
            $fecha->add($intervalo_dia);
        }
        // se valida que no caiga un sabado ni domingo
        /* $dia_semana = $fecha->format('w');
              if ( $dia_semana == '6' ){
                  // sabado
                  $fecha->add(new \DateInterval('P2D'));
              } elseif ( $dia_semana == '0' ){
                  // domingo
                  $fecha->add($intervalo_dia);
              } */
        //
        return $fecha;
    }
    /**
     * Funcion que valida que las fechas 
     * no hayan caido en tiempo de feriado.
     * Si caen en feriado se modifican hasta
     * la fecha hábil mas cercana
     * @access private
     * @param DateTime fecha de inicio informe
     * @param DateTime fecha comprometida informe
     * @return DateTime modifica el contenido de los objetos sin tener que devolverlos
     */
    private static function omitirFeriados($fecha_inicio, $fecha_comprometida)
    {
        //--Modificado 12/05/2023--
        $intervalo_dia = new \DateInterval('P1D'); // intervalo de un dia

        // $feriados = SQLConnection::backendStoreProcedure('IVferiados',array('LIST_FERIADOS')); // obtenemos los feriados nacionales
        $feriados = SQLConnection::backendStoreProcedure('LN_feriados', array('LIST_PAIS', 'AR', NULL, NULL));

        //-------------------------   
        $fecha_comprometida_analisis = clone $fecha_comprometida;
        $fecha_comprometida_analisis->setTime(0, 0, 0);
        $fecha_inicio_analisis = clone $fecha_inicio;
        $fecha_inicio_analisis->setTime(0, 0, 0);
        $entra = 0;

        foreach ($feriados as $dia_feriado) {

            $obj_dia_feriado = new DateTime($dia_feriado->fecha_feriado);
            if ($obj_dia_feriado && $obj_dia_feriado->format('Y-m-d H:i:s') == $fecha_inicio_analisis->format('Y-m-d H:i:s')) {

                /* 
                    si fecha de inicio es feriado , tambien se modifica
                        la fecha comprometida para respetar la duracion
                */
                $fecha_inicio->add($intervalo_dia);
                $fecha_comprometida_analisis->add($intervalo_dia);
            } elseif ($obj_dia_feriado && $obj_dia_feriado->format('Y-m-d') == $fecha_comprometida_analisis->format('Y-m-d')) {
                $fecha_comprometida_analisis->add($intervalo_dia);
            } elseif ($obj_dia_feriado && ($obj_dia_feriado->format('Y-m-d') < $fecha_comprometida_analisis->format('Y-m-d')) && ($obj_dia_feriado->format('Y-m-d') > $fecha_inicio_analisis->format('Y-m-d'))) {

                $fecha_comprometida_analisis->add($intervalo_dia);

            }
        }
        $fecha_inicio = self::calcularFinDeSemana($fecha_inicio);
        $fecha_comprometida_analisis = self::calcularFinDeSemana($fecha_comprometida_analisis);

        return $fecha_comprometida_analisis;
    }
    /**
     * Funcion que calcula
     * @access private
     * @param DateTime fecha de inicio informe
     * @param DateTime fecha comprometida informe
     * @return DateTime modifica el contenido de los objetos sin tener que devolverlos
     */
    private static function calcularFinDeSemana($fecha)
    {
        $dia_semana = $fecha->format('w');
        $intervalo_dia = new \DateInterval('P1D'); // intervalo de un dia

        if ($dia_semana == '6') {
            // sabado
            $fecha->add(new \DateInterval('P2D'));
        } elseif ($dia_semana == '0') {
            // domingo
            $fecha->add($intervalo_dia);
        }

        return $fecha;
    }

    // Esta funcion va a devolver la respuesta parcial en caso que RENAPER este caido
    public static function formatoRespuestaRenaperParcial($res_renaper, $dni, $fechaParaValidar, $generoParaValidar, $fecha_emision_recivida, $fecha_expiracion_emitida, $copia, $idMainIssue, $tax_id_type, $antiguedad_situacion_1)
    {

        $nuevaRespuesta = new stdClass(); // Validates TRUE or FALSE for certain variables
        $nuevaRespuesta2 = new stdClass(); // Returns data without TRUE or FALSE verification

        // Parametros Importantes
        $nuevaRespuesta2->national_id = isset($res_renaper->dni) ? $res_renaper->dni : '';
        $nuevaRespuesta2->tax_id = isset($res_renaper->cuil) ? $res_renaper->cuil : '';
        $nuevaRespuesta2->tax_id_type = $tax_id_type;
        $nuevaRespuesta2->sit_1_since = isset($antiguedad_situacion_1) ? $antiguedad_situacion_1 : "";
        $nuevaRespuesta2->DOD = "";

        // Detalles de domicilio
        $nuevaRespuesta2->nationality = isset($res_renaper->nacionalidad) ? ((strtoupper($res_renaper->nacionalidad) == 'ARGENTINA') ? $res_renaper->nacionalidad : 'EXTRANJERO') : '';
        $nuevaRespuesta2->street_name = isset($res_renaper->calle) ? $res_renaper->calle : '';
        $nuevaRespuesta2->street_number = isset($res_renaper->numero) ? $res_renaper->numero : '';
        $nuevaRespuesta2->floor = isset($res_renaper->piso) ? $res_renaper->piso : '';
        $nuevaRespuesta2->apartment = isset($res_renaper->departamento) ? $res_renaper->departamento : '';
        $nuevaRespuesta2->zip = isset($res_renaper->cpostal) ? $res_renaper->cpostal : '';
        $nuevaRespuesta2->city = isset($res_renaper->ciudad) ? $res_renaper->ciudad : '';
        $nuevaRespuesta2->state = isset($res_renaper->provincia) ? $res_renaper->provincia : '';
        $nuevaRespuesta2->country = isset($res_renaper->pais) ? $res_renaper->pais : '';


        // Validacion de genero
        $nuevaRespuesta->gender = '';
        // Validacion de parametros opcionales
        $nuevaRespuesta->id_main_issue = '';
        $nuevaRespuesta->copy = '';
        $nuevaRespuesta->issue_date = '';
        $nuevaRespuesta->expiry_date = '';
        $nuevaRespuesta->DOB = '';

        $formateoFinal = [$nuevaRespuesta, $nuevaRespuesta2];

        return $formateoFinal;
    }


    public static function conversorApisExtendedParcial($obj, $res_renaper, $res_ws, $nationality, $gender, $issue_date, $expiry_date, $internal_id, $copy)
    {
        $n = new stdClass();
        $n2 = new stdClass();
        $n3 = new stdClass();
        //-- dni ingresado
        $n->National_id = $obj[0]->dni;

        //-- nombre, apellido
        $n->Full_name = $obj[0]->nombre_persona;
        $n->Name = $obj[0]->nombres;
        $n->Lastname = $obj[0]->apellidos;

        //-- fecha nac
        $n->DBO = $obj[0]->fecha_nacimiento;

        //-- cuit/cuil
        $n->Tax_id_type = $obj[0]->tipo_clave;
        $n->Tax_id_number = $obj[0]->identificacion;

        //-- fecha defuncion
        $n->DOD = $obj[0]->fecha_defuncion;

        //-- telefonos
        $tel = explode('/', $obj[0]->telefonos);
        $n->Phone_number = (count($tel) == 1 && strlen($tel[0]) == 0) ? null : $tel;

        //-- mail
        $emails = explode('/', $obj[0]->email);
        //$n->Email = $obj[0]->email;
        $n->Email = (count($emails) == 1 && strlen($emails[0]) == 0) ? null : $emails;

        //-- codigo actividad y nombre
        $n->Activity_code = $obj[0]->cod_actividad;
        $n->Activity_description = $obj[0]->nombre_actividad;

        //-- domicilio
        $n->Address = self::limpiaderDomicilioExtend($obj[0]->domicilio);

        #Se comento la nacionalidad para que no salga en la respuesta del api
        //-- nacionalidad
        #$n3->Nationality = $obj[0]->nacionalidad;
        #$n3->Nationality = ($obj[0]->nacionalidad == ($nationality || strtoupper($nationality))) ? TRUE : FALSE;    

        //-- genero
        $n3->Gender = '';

        //-- codigos del dni
        if (is_null($res_renaper)) {
            $n3->Issue_date = '';
            $n3->Expiry_date = '';
            $n3->Internal_id = '';
            $n3->Copy = '';
        } else {
            $fe = explode('/', $res_renaper->EMISION);
            $fe = $fe[2] . '-' . $fe[1] . '-' . $fe[0];
            $n3->Issue_date = '';

            $fv = explode('/', $res_renaper->VENCIMIENTO);
            $fv = $fv[2] . '-' . $fv[1] . '-' . $fv[0];
            $n3->Expiry_date = '';

            $n3->Internal_id = '';

            $n3->Copy = '';
        }

        $n3->Fidecheck = $res_ws;

        return array('Govcheck' => $n, 'Extended' => $n3);
    }

    //Funcion que devuelve el mensaje del error en la consulta - SMTB
	public static function error_query($error_code){
    	$error_messages = [
        '100' => 'The country code only allows 2 characters. Eg: AR, BR, ES.',
        '200' => 'Ok', 
        '201' => 'Duplicate National ID',
        '300' => 'NATIONAL_ID field must be an 8-digit number.',
        '301' => 'The provided national id does not match a valid one and could not be validated. Please review it and try again.',
        '302' => 'TAX_ID field must be an 11-digit number.',
        '303' => 'SELFIE_IMAGE field cannot be empty',
        '304' => 'GENDER field cannot be empty and must be M, F or X',
        '305' => 'NATIONAL_ID GENDER combination not found',
        '306' => 'The query cannot be carried out at this time',
        '307' => 'Error connecting to the public identity validation system',
        '308' => 'You must enter at least one tax ID, ID number, or name.',     
        '309' => 'The search by tax ID or ID number is only valid for Argentina.',
        '310' => 'You must enter at least one tax ID or national ID number',
        '311' => 'You do not have access to the product.',
        '312' => 'NATIONAL_ID cannot be empty.',
        '313' => 'The entered data belongs to an under age person. Queries about under age persons cannot be performed.',
        '314' => 'ID_MAIN_ISSUE field cannot be empty',      
        '315' => 'Partial response. Error connecting to the public identity validation system.',
        '316' => 'The minimum number of characters for name and surname is 2.',
        '317' => 'Invalid date format. Correct format is yyyy-mm-dd',
        '318' => 'The provided TAX_ID does not belong to a natural person.',
        '319' => 'The minimum number of characters for name and surname is 3.',
        '401' => 'No results found for the provided data. Please try again.',       
        '400' => 'Connection error, please try again.',
        '405' => 'Conflict with the image; it cannot be processed.',
        '406' => 'Error in image processing; ensure it is not a video, the image must have a .png or .jpg extension, and a face must be visible',   
        '407' => 'National ID invalidated due to naturalization. Consider the new ID provided in the response', // Carta de ciudadania
        '410' => 'Timeout exceeded. Please try again.',   
        '416' => 'The length of the provided TAX_ID or NATIONAL_ID is invalid.',
        '503' => 'The endpoint you are trying to use is no longer available. Please use the latest version of the API.',
        'ERROR_PRODUCTO' => 'The user does not have access to the product.',
        'INTERNAL_ERROR' => 'TIMEOUT EXCEEDED.'        
    ];

    return $error_messages[$error_code] ?? 'Unknown error occurred.';
}

    public static function error_querySM($error_code)
    {
        $error_messages = [
            '100' => 'The country code only allows 2 characters. Eg: AR, BR, ES.',
            '200' => 'Ok',
            '300' => 'NATIONAL_ID field must be an 8-digit number.',
            '301' => 'The provided national id does not match a valid one and could not be validated. Please review it and try again.',
            '302' => 'TAX_ID field must be an 11-digit number.',
            '303' => 'SELFIE_IMAGE field cannot be empty',
            '304' => 'GENDER field cannot be empty and must be M, F or X',
            '305' => 'NATIONAL_ID GENDER combination not found',
            '306' => 'The query cannot be carried out at this time',
            '307' => 'Error connecting to the public identity validation system',
            '308' => 'You must enter at least one tax ID, ID number, or name.',
            '309' => 'The search by tax ID or ID number is only valid for Argentina.',
            '310' => 'You must enter at least one tax ID or national ID number',
            '311' => 'You do not have access to the product.',
            '312' => 'NATIONAL_ID cannot be empty.',
            '313' => 'The entered data belongs to an under age person. Queries about under age persons cannot be performed.',
            '401' => 'No results found for the provided data. Please try again.',
            '400' => 'Connection error, please try again.',
            '405' => 'Conflict with the image; it cannot be processed.',
            '406' => 'Error in image processing; ensure it is not a video, the image must have a .png or .jpg extension, and a face must be visible',
            '410' => 'Timeout exceeded. Please try again.',
            '503' => 'The endpoint you are trying to use is no longer available. Please use the latest version of the API.',
            'ERROR_PRODUCTO' => 'The user does not have access to the product.',
            'INTERNAL_ERROR' => 'TIMEOUT EXCEEDED.'
        ];

        return $error_messages[$error_code] ?? 'Unknown error occurred.';
    }

    public static function formateoRespuestaDomicilioGocheck($datosDomicilios, $datosValidados)
    {
        // Definir propiedades a eliminar
        $propiedadesAEliminar = ['id', 'created'];
        foreach ($datosDomicilios as $objeto) {
            foreach ($propiedadesAEliminar as $propiedad) {
                unset($objeto->$propiedad);
            }
        }

        $json = [
            'validation' => $datosValidados,
            'validated_against' => $datosDomicilios
        ];

        return $json;
    }

    /** 
     * Esta función toma un array de objetos que contienen datos de domicilios y transforma cada objeto
     * en un nuevo formato, tambien elimina propiedades innecesarias de cada objeto original antes de agregarlo al array transformado
     *
     * @param array $datosDomicilios Un array de objetos que contienen datos de domicilios. Las propiedades 'id' y 'created' serán eliminadas.
     * 
     * @return array
     */
    public static function respuestaDomiciliosGovcheck($datosDomicilios)
    {
        $datosTransformados = [];

        foreach ($datosDomicilios as $objeto) {
            $nuevoObjeto = [
                'address'       => $objeto->domicilio ?? '',
                'country'       => $objeto->pai_nombre ?? '',
                'province'      => $objeto->prv_nombre ?? '',
                'locality'      => $objeto->loc_nombre ?? '',
                'postal_code'   => $objeto->codpos ?? '',
                'floor'         => $objeto->piso ?? '',
                'street_number' => $objeto->altura ?? '',
                'apartment'     => $objeto->depto ?? '',
                'street_name'   => $objeto->calle ?? '',
                'type_address'  => $objeto->type_address ?? [], 
            ];

            $datosTransformados[] = $nuevoObjeto;
        }

        return [
            'address_data' => $datosTransformados,
        ];
    }

    public static function conversorApisExtended_vacio() {
        $n = new stdClass();
        $n2 = new stdClass();
        $n3 = new stdClass();
        $n4 = new stdClass();
    
        //-- dni ingresado
        $n->National_id = 'null';
        
        //-- nombre, apellido
        $n->Full_name = 'null';
        $n->Name = 'null';
        $n->Lastname = 'null';
    
        //-- fecha nac
        $n->DBO = 'null';
    
        //-- cuit/cuil
        $n->Tax_id_type = 'null';
        $n->Tax_id_number = 'null';
    
        //-- fecha defuncion
        $n->DOD = 'null';
    
        //-- telefonos
        $n->Phone_number = 'null';
        
        //-- mail
        $n->Email = 'null';
    
        //-- codigo actividad y nombre
        $n->Activity_code = 'null';
        $n->Activity_description = 'null';
    
        //-- domicilio
        $n->Address = 'null';
        
        //-- nacionalidad
        $n3->Nationality = 'null';
    
        //-- genero
        $n3->Gender = 'null';
    
        //-- codigos del dni
        $n3->Issue_date = 'null';
        $n3->Expiry_date = 'null';
        $n3->Internal_id = 'null';
        $n3->Copy = 'null';
    
        $n4->Sanctions_search = 'null';
        $n4->Pep_search = 'null';
        $n4->So_search = 'null';
        
        $n3->Fidecheck = $n4;
    
        return array('Govcheck'=>$n,'Extended'=>$n3);
    }

    public static function conversorApisExtended_v2($obj, $res_renaper, $res_ws) {
        $n = new stdClass();
        $n2 = new stdClass();
        $n3 = new stdClass();
        //-- dni ingresado
        $n->National_id = 'null';
        
        //-- nombre, apellido
        $n->Full_name = 'null';
        $n->Name = 'null';
        $n->Lastname = 'null';
    
        //-- fecha nac
        $n->DBO = 'null';
    
        //-- cuit/cuil
        $n->Tax_id_type = 'null';
        $n->Tax_id_number = 'null';
    
        //-- fecha defuncion
        $n->DOD = 'null';
    
        //-- telefonos
        $n->Phone_number = 'null';
        
        //-- mail
        $n->Email = 'null';
    
        //-- codigo actividad y nombre
        $n->Activity_code = 'null';
        $n->Activity_description = 'null';
    
        //-- domicilio
        $n->Address = 'null';
    
        //-- aregado
        $n3->Full_name = strtoupper($res_renaper->apellido.' '.$res_renaper->nombres);
        $n3->Name = strtoupper($res_renaper->nombres);
        $n3->Lastname = strtoupper($res_renaper->apellido);
        
        //-- fecha nac
        $fNac = explode('/', $res_renaper->fechaNacimiento);
        if(count($fNac) > 1) {
            $n3->DBO = $fNac[2].'-'.$fNac[1].'-'.$fNac[0];
        } else {
            $n3->DBO = 'null';
        }
    
        //-- fecha defuncio
        $fDef = explode('/', $res_renaper->fechaf);
        if(count($fDef) > 1) {
            $n3->DOD = $fDef[2].'-'.$fDef[1].'-'.$fDef[0];
        } else {
            $n3->DOD = 'null';
        }
    
        //-- nacionalidad
        $n3->Nationality = $res_renaper->nacionalidad;
    
        //-- genero
        $n3->Gender = $res_renaper->sexo;
    
        //-- codigos del dni
        $fe = explode('/', $res_renaper->EMISION);
        if(count($fe) > 1) {
            $fe = $fe[2].'-'.$fe[1].'-'.$fe[0];
            $n3->Issue_date = $fe;
        } else {
            $n3->Issue_date = 'null';
        }
    
        $fv = explode('/', $res_renaper->VENCIMIENTO);
        if(count($fv) > 1) {
            $fv = $fv[2].'-'.$fv[1].'-'.$fv[0];
            $n3->Expiry_date = $fv;
        } else {
            $n3->Expiry_date = 'null';
        }
        
          
        $n3->Internal_id = $res_renaper->ID_TRAMITE_PRINCIPAL;
        $n3->Copy = $res_renaper->EJEMPLAR;
    
        $n3->Fidecheck = $res_ws;
    
        return array('Govcheck'=>$n,'Extended'=>$n3);
    }

    public static function gestorNotificacionGovcheck_v2($obj, $indicador) {
        if(count($obj) > 1 && $indicador == 1) {
            return array('code'=>'201', 'message'=>'Duplicate tax id.');
        } else if((count($obj) == 0 && $indicador == 1) || (is_null($obj) && $indicador == 1)) {
            return array('code'=>'300', 'message'=>'The Govcheck step validation could not match the national id provided against a valid tax id.');
        } else if((count($obj) == 0 && $indicador == 0) || (is_null($obj) && $indicador == 0))  {
            return array('code'=>'326', 'message'=>'The national id provided could not be validated against public sources. The Govcheck step validation could not match the national id provided against a valid tax id.');
        } else {
            return array('code'=>'100', 'message'=>'Ok.');
        }
    }
    /*
        Funcion para generar la respuesta de renaper (tanto de personal cred como de facematch)     
    */
    public static function respuestaRenaperGenerica( $res_renaper, $tax_id_type, $antiguedad_situacion_1, $fechaDefuncion,$ultima_formateada,$maxima_formateada,$chequesRechazados,$cantidadBancosUnicos,$fecha_nacimiento){
        $respuestaDatos = new stdClass(); 

        // Datos personales    
        $respuestaDatos->national_id = isset($res_renaper->dni) ? $res_renaper->dni : '';
        $respuestaDatos->tax_id = isset($res_renaper->cuil) ? $res_renaper->cuil : '';
        $respuestaDatos->tax_id_type = $tax_id_type;
        $respuestaDatos->Name = isset($res_renaper->nombres) ? $res_renaper->nombres : '';
        $respuestaDatos->Lastname = isset($res_renaper->apellido) ? $res_renaper->apellido : '';

       //SM AGB  $objetoFechaNacimiento = DateTime::createFromFormat('d/m/Y', $res_renaper->fechaNacimiento);
       //SM AGB  $fecha_nacimiento = $objetoFechaNacimiento->format('Y-m-d');
	$objetoFechaNacimiento = isset($res_renaper->fechaNacimiento) ? DateTime::createFromFormat('d/m/Y', $res_renaper->fechaNacimiento) : null;
	$fecha_nacimiento = $objetoFechaNacimiento ? $objetoFechaNacimiento->format('Y-m-d') : '';
        $respuestaDatos->DOB = !empty($fecha_nacimiento) && isset($fecha_nacimiento) ? $fecha_nacimiento : '';
        $respuestaDatos->DOD = !empty($fechaDefuncion) && !is_null($fechaDefuncion) ? $fechaDefuncion : '';

        // Datos de bancos
        $respuestaDatos->sit_1_since = isset($antiguedad_situacion_1) ? $antiguedad_situacion_1 : "";
        $respuestaDatos->banks = isset($cantidadBancosUnicos) ? $cantidadBancosUnicos : "";
        $respuestaDatos->last_position = isset($ultima_formateada) ? $ultima_formateada : "";
        $respuestaDatos->highest_position = isset($maxima_formateada) ? $maxima_formateada : "";
        $respuestaDatos->rejected_checks = isset($chequesRechazados) ? $chequesRechazados : "";        

        // Datos de domicilio
        $respuestaDatos->nationality = isset($res_renaper->nacionalidad) ? ((strtoupper($res_renaper->nacionalidad) == 'ARGENTINA') ? $res_renaper->nacionalidad : 'EXTRANJERO') : '';
        $respuestaDatos->street_name = isset($res_renaper->calle) ? $res_renaper->calle : '';
        $respuestaDatos->street_number = isset($res_renaper->numero) ? $res_renaper->numero : '';
        $respuestaDatos->floor = isset($res_renaper->piso) ? $res_renaper->piso : '';
        $respuestaDatos->apartment = isset($res_renaper->departamento) ? $res_renaper->departamento : '';
        $respuestaDatos->zip = isset($res_renaper->cpostal) ? $res_renaper->cpostal : '';
        $respuestaDatos->city = isset($res_renaper->ciudad) ? $res_renaper->ciudad : '';
        $respuestaDatos->state = isset($res_renaper->provincia) ? $res_renaper->provincia : '';
        $respuestaDatos->country = isset($res_renaper->pais) ? $res_renaper->pais : '';

        return $respuestaDatos;
    }

    /* 
        Funcion que realiza la validacion de los datos opcionales de las apis de renaper
        Valida los parametros opcionales de entrada con los que me devuelve renaper (true o false)
    */
    public static function validacionDatosRenaper($res_renaper, $generoParaValidar, $fecha_emision_recivida, $fecha_expiracion_emitida, $copia, $idMainIssue){        
        // Validacion de parametros opcionales
        $respuestaValidada = new stdClass();
        
        $respuestaValidada->gender = (isset($res_renaper->sexo) && $res_renaper->sexo == $generoParaValidar) ? true : false;                
        $respuestaValidada->id_main_issue = (isset($res_renaper->ID_TRAMITE_PRINCIPAL)) ? (!empty($idMainIssue) ? (($res_renaper->ID_TRAMITE_PRINCIPAL == $idMainIssue) ? true : false) : '') : '';
        $respuestaValidada->copy = (isset($res_renaper->EJEMPLAR)) ? (!empty($copia) ? (($res_renaper->EJEMPLAR == $copia) ? true : false) : '') : '';        
        $respuestaValidada->issue_date = (isset($res_renaper->EMISION)) ? (!empty($fecha_emision_recivida) ? (strtotime(self::invertirFecha($res_renaper->EMISION)) == strtotime($fecha_emision_recivida) ? true : false) : '') : '';
        $respuestaValidada->expiry_date = (isset($res_renaper->VENCIMIENTO)) ? (!empty($fecha_expiracion_emitida) ? (strtotime(self::invertirFecha($res_renaper->VENCIMIENTO)) == strtotime($fecha_expiracion_emitida) ? true : false) : '') : '';
        return $respuestaValidada;
    }

    // Función para escribir un log en el archivo del día
    public static function guardarLogTxt($datos, $user_id, $producto, $parametros) {        
        $currentDate = date("Y-m-d");

        $path = ENV('PATH_COMPARTIDO_LOG');

        if (!file_exists($path)) {
            mkdir($path, 0777, true);           
        } 

        $logFilename = $path . "/$currentDate.txt"; 
        
        $currentTime = date("H:i:s");
        
        $logMessage = "[" . $currentDate . ' ' .  $currentTime . "]" . "[" . $user_id->user_id . "]" . "[" . $producto ."]" . "[" . $parametros ."]" . json_encode($datos) . "\n";
        
        file_put_contents($logFilename, $logMessage, FILE_APPEND);
    }

    public static function medirTiempoRespuesta(){
        return $tiempo = str_pad(number_format(
            num: (microtime(true) - LARAVEL_START), 
            decimals: 3,
            decimal_separator: ',',
            thousands_separator: '.',
        ).'s', length: 10, pad_type: STR_PAD_LEFT);        
    }

    public static function interrumpirPorTimeout($user_id, $producto, $enviados_originales){
        ApiControllerV1::Guardar_resultado_api($user_id, $producto, $enviados_originales['dni'], $enviados_originales['gender'], null, json_encode([
                'Parameters' => $enviados_originales,
                'Status' => 'ERROR',
                'Message' => 'TIMEOUT: El servicio superó el límite de tiempo de 3.5 segundos',
                'Response' => []
            ]), 
            '410', 
            Misc::medirTiempoRespuesta()
        );

        return json_encode([
            'Parameters' => $enviados_originales,
            'Status' => 410,
            'Message' => Misc::error_query(410),
            'Response' => []
        ]);
    }

    public static function validarTelefono($telefono) {
        return ctype_digit($telefono) && strlen($telefono) === 10;
    }

    public static function validarEdad($identificacion, $sexo=null) {
        //La identificacion puede ser DNI o CUIL
        $edad = NULL;
        $validarEdad = SQLConnection::backendStoreProcedure('sp_GetPersonaInfoEdad', array($identificacion,$sexo), 'select');
        if(!empty($validarEdad) && $validarEdad !== null && count($validarEdad) > 0){
	
	if ($validarEdad[0]->tipo_persona != 'F' && $validarEdad[0]->tipo_persona !== null) 
	{
          return true;
	}
            if(!empty($validarEdad[0]->edad) && $validarEdad[0]->edad !== null){
                $edad = $validarEdad[0]->edad;
            }
        }

        // Retornar true si es mayor de edad, false si es menor
        return $edad !== null && $edad >= 18;
    }

/*
    Funcion para acomodar los resultados de la DB, solo se esta usando para la 
    API Govcheck.
    REQUIERE: $obj = (Objeto y/o resultado DB)
    Se hizo una función separada para V4 para corregir el nodo DOB que estaba mal escrito (DBO)
*/

/*
        Funcion para acomodar los resultados de la DB, solo se esta usando para la 
        API Govcheck.
        REQUIERE: $obj = (Objeto y/o resultado DB)
                  $datos_bancarios = Info bancaria de cada cuit de obj
        Se hizo una función separada para V4 para corregir el nodo DOB que estaba mal escrito (DBO)
    */
    public static function conversorApisGovcheckV4($obj, $datos_bancarios)
    {

        $arreglo = array();
        for ($i = 0; $i < count($obj); $i++) {
            $n = new stdClass();
            //-- dni ingresado
            $n->National_id = $obj[$i]->dni;

            //-- nombre, apellido
            $n->Full_name = $obj[$i]->nombre_persona;
            $n->Name = $obj[$i]->nombres;
            $n->Lastname = $obj[$i]->apellidos;

            //-- fecha nac
            $n->DOB = $obj[$i]->fecha_nacimiento;

            //-- cuit/cuil
            $n->Tax_id_type = $obj[$i]->tipo_clave;
            $n->Tax_id_number = $obj[$i]->identificacion;

            //-- fecha defuncion
            $n->DOD = $obj[$i]->fecha_defuncion;

            //-- telefonos
            $tel = explode('/', $obj[$i]->telefonos);
            $n->Phone_number = (count($tel) == 1 && strlen($tel[0]) == 0) ? null : $tel;

            //-- mail
            $n->Email = $obj[$i]->email;

            //-- codigo actividad y nombre
            $n->Activity_code = $obj[$i]->cod_actividad;
            $n->Activity_description = $obj[$i]->nombre_actividad;

            //-- domicilio
            $n->Address = self::limpiaderDomicilioExtend($obj[$i]->domicilio);

            $n->Sit_1_since = $datos_bancarios[$obj[$i]->identificacion]['Sit_1_since'];
            $n->Banks = $datos_bancarios[$obj[$i]->identificacion]['Banks'];
            $n->Last_position = $datos_bancarios[$obj[$i]->identificacion]['Last_position'];
            $n->Highest_position = $datos_bancarios[$obj[$i]->identificacion]['Highest_position'];
            $n->Rejected_checks = $datos_bancarios[$obj[$i]->identificacion]['Rejected_checks'];

            $arreglo[$i] = $n;
        }

        //return $n;    
        return $arreglo;
    }


public static function conversorApisGovcheckV4_0($obj)
{

    $arreglo = array();
    for ($i = 0; $i < count($obj); $i++) {
        $n = new stdClass();
        //-- dni ingresado
        $n->National_id = $obj[$i]->dni;

        //-- nombre, apellido
        $n->Full_name = $obj[$i]->nombre_persona;
        $n->Name = $obj[$i]->nombres;
        $n->Lastname = $obj[$i]->apellidos;

        //-- fecha nac
        $n->DOB = $obj[$i]->fecha_nacimiento;

        //-- cuit/cuil
        $n->Tax_id_type = $obj[$i]->tipo_clave;
        $n->Tax_id_number = $obj[$i]->identificacion;

        //-- fecha defuncion
        $n->DOD = $obj[$i]->fecha_defuncion;

        //-- telefonos
        $tel = explode('/', $obj[$i]->telefonos);
        $n->Phone_number = (count($tel) == 1 && strlen($tel[0]) == 0) ? null : $tel;

        //-- mail
        $n->Email = $obj[$i]->email;

        //-- codigo actividad y nombre
        $n->Activity_code = $obj[$i]->cod_actividad;
        $n->Activity_description = $obj[$i]->nombre_actividad;

        //-- domicilio
        $n->Address = self::limpiaderDomicilioExtend($obj[$i]->domicilio);

        $arreglo[$i] = $n;
    }

    //return $n;    
    return $arreglo;
}

public static function cantidadDias($fecha)
{
    $hoy = new DateTime("now");
    $fecha = date_create($fecha);
    $diferencia = date_diff($fecha, $hoy);
    return $diferencia->days;
}

public static function respuestaParcialPersonalCred(
    $datos_persona,
    $antiguedad_situacion_1,
    $ultima_formateada,
    $maxima_formateada,
    $chequesRechazados,
    $cantidadBancosUnicos
) {
    $datos_generales = new stdClass(); // Returns data without TRUE or FALSE verification

    // Parametros Importantes
    $datos_generales->national_id   = isset($datos_persona[0]->dni)           ? $datos_persona[0]->dni           : '';
    $datos_generales->tax_id        = isset($datos_persona[0]->identificacion) ? $datos_persona[0]->identificacion : '';
    $datos_generales->tax_id_type   = isset($datos_persona[0]->tipo_clave)     ? $datos_persona[0]->tipo_clave    : '';
    $datos_generales->Name          = isset($datos_persona[0]->nombres)        ? $datos_persona[0]->nombres       : '';
    $datos_generales->Lastname      = isset($datos_persona[0]->apellidos)      ? $datos_persona[0]->apellidos     : '';
    
    $datos_generales->DOB           = isset($datos_persona[0]->fecha_nacimiento) && !empty($datos_persona[0]->fecha_nacimiento)
                                        ? $datos_persona[0]->fecha_nacimiento
                                        : '';
    $datos_generales->DOD           = isset($datos_persona[0]->fecha_defuncion) && !empty($datos_persona[0]->fecha_defuncion)
                                        ? $datos_persona[0]->fecha_defuncion
                                        : '';

    // Datos bancarios
    $datos_generales->sit_1_since   = isset($antiguedad_situacion_1)           ? $antiguedad_situacion_1          : '';
    $datos_generales->banks            = isset($cantidadBancosUnicos) ? $cantidadBancosUnicos : '';
    $datos_generales->last_position    = isset($ultima_formateada)    ? $ultima_formateada    : '';
    $datos_generales->highest_position = isset($maxima_formateada)    ? $maxima_formateada    : '';
    $datos_generales->rejected_checks  = isset($chequesRechazados)    ? $chequesRechazados    : '';

    // Detalles de domicilio
    // $datos_persona provee domicilio como campo compuesto, sin desglose por componente
    $datos_generales->nationality  = isset($datos_persona[0]->nacionalidad)
        ? ((strtoupper($datos_persona[0]->nacionalidad) == 'ARGENTINA') ? $datos_persona[0]->nacionalidad : 'EXTRANJERO')
        : '';
    $datos_generales->address      = isset($datos_persona[0]->domicilio) ? self::limpiaderDomicilioExtend($datos_persona[0]->domicilio) : '';
    $datos_generales->street_name   = '';
    $datos_generales->street_number = '';
    $datos_generales->floor         = '';
    $datos_generales->apartment     = '';
    $datos_generales->zip           = '';
    $datos_generales->city          = '';
    $datos_generales->state         = '';
    $datos_generales->country       = '';

    return $datos_generales;
}





}
