<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Http\Controllers\MainController;
use App\Http\Controllers\AFIPController;
use App\Http\Controllers\RenaperController;
use App\Custom\Misc;
use Request;
use Session;
use stdClass;
use DateTime;
use DB;
use LynX39\LaraPdfMerger\PdfManage;
use Response;

class ApiControllerV1 extends Controller {
	public static $MainController;
	private static $amerita_situacion_1 = false;
	private static $cantidad_situacion_1 = 0;
	private static $cuit = '';
	private static $tiene_pdf = false;
	private static $observado = false;
	private static $sesion_externa = '';
	private static $suma_de_grupos = 0;
	private static $porcentaje_por_grupo_afectado_por_preferencias = 0;
	private static $score_contables = 0;
	private static $edad = 28;
	public static $monsanto = 'No Registra Antecedentes Negativos';
	public static $revisar_monsanto = false;

	public function __construct(){
		if(!self::$MainController){
			self::$MainController = new MainController();
		}
	}
  
  	public static function consumir_servicio($cuit,$producto=null,$id_externo=null){
	  	$p_ip    = $_SERVER['REMOTE_ADDR'];
	  	$p_url   = $_SERVER['REQUEST_URI'];
	  	$usuario = Session::get('usuario');
		$user_id = $usuario->user_id;
		if ($producto == NULL) {
			$producto = $usuario->producto;
		}
		$resp = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$cuit,$producto,$p_ip,$p_url,$id_externo),'selectOne');
		return $resp; 
	}

	private static function BuscarCuit($dni,$posibles='N') {
		/* 01/10/2020 */
		/* Busca CUITs en el padron, para ese dni, y lo pasa por AFIP */ 
		/* Segundo parametro 'S' busca siempre otros posibles CUITs que no estén en el padrón */
		/* o si no lo encuetra en Padrón busca si o si los posibles CUITs para ese DNI */
		$cuits = SQLConnection::backendStoreProcedure('dni_buscar_cuit_segun_dni', array($dni));
		 
		foreach ($cuits as $key => $value) {
			AFIPController::obtenerPadron($value->cuit,true,'AR',false);
		}
		 
		if ($posibles == 'S' && sizeof($cuits) == 0) {
			$cuitp = SQLConnection::backendStoreProcedure('dni_buscar_cuit_posible', array($dni,'N')); 
			foreach ($cuitp as $key => $value) {
				AFIPController::obtenerPadron($value->cuit,true,'AR',false);
			}
			return $cuitp; 
		} 
		return $cuits; 
	}

	/**
	 * API especial para monsanto, devuelve datos que se devolvian en un batch que pidieron ellos..
	*/
	public static function monsantoInfo(){

		$usuario    	= Session::get('usuario');
		$user_id    	= $usuario->user_id;
		$cliente     	= $usuario->cliente['client_id'];
		$cuit     		= trim(Request::input('cuit'));
		$p_ip 			= $_SERVER['REMOTE_ADDR'];

		$enviados['cuit'] = $cuit;
		$producto       = $usuario->producto ?? 78;
		
		//aca se consume el servicio
		self::consumir_servicio($cuit,$producto); 

		if (empty($cuit)) {
			return json_encode([
			'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'El cuit no puede estar vacío','Response'=>[]
			]);
		}

		if (strlen($cuit) == 11) {
			AFIPController::obtenerPadron($cuit,true,'AR',false);
		} else {
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'El cuit debe poseer 11 números','Response'=>[]
				]);
		}

		$result = SQLConnection::backendStoreProcedure('api_monsanto_batch',array($cliente,date('Y-m-d h:i:s'),$cuit),'selectOne');

		return json_encode([
			'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result
		]);
  	}

	/**
	 * API especial para mati, reutilizar desde el api.php con otra entrada de "empresa"..
	*/
	public static function validacionMati(){
		$usuario    		= Session::get('usuario');
		$user_id    		= $usuario->user_id;
		$cliente     		= $usuario->cliente['client_id'];
		$dni     		= trim(Request::input('dni'));
		$nombre     		= trim(Request::input('nombre'));
		$fecha_nacimiento	= trim(Request::input('fecha_nacimiento'));
		$p_ip 			= $_SERVER['REMOTE_ADDR'];
		$cuit			= "";
		$enviados['dni'] = $dni;
		$enviados['nombre'] = $nombre;
		$enviados['fecha_nacimiento'] = $fecha_nacimiento;
		$producto       = $usuario->producto ?? 71;
		
		if(empty($dni) || strlen($dni) != 8){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'El campo dni no puede estar vacío y debe ser un número de 8 dígitos','Response'=>[]
			]);
		}
		
		self::BuscarCuit($dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 

		$response = SQLConnection::backendStoreProcedure('api_validacion_mati',array($dni),'select');
		/* RENAPER */
		/* 23/07/2021: Si no tenemos la fecha de nacimiento en la BD (el campo buscar_fecha_nac viene con valor 1) entonces, buscamos en Renaper */
		if (is_null($response->fecha_nacimiento)) {
			if ($response->identificacion[0] == '2') {
			  $renaper = json_decode(RenaperController::obtenerUltimoEjemplarUno($response->dni, 'M',1)); 
			} else { 
			  $renaper = json_decode(RenaperController::obtenerUltimoEjemplarUno($response->dni,'F',1)); 
			}
			$response = SQLConnection::backendStoreProcedure('api_validacion_mati',array($dni),'select');
		}
		/* FIN RENAPER */
		
		$result = [];
		foreach ($response as $key => $value) {
			$persona = new \StdClass();
			$persona->nombres = $value->nombre_persona;
			$name_validation = 'FALSE';
			$nombre_contains = explode(' ',$enviados['nombre']);
			foreach ($nombre_contains as $name) {
				foreach (explode(' ',$value->nombre_persona) as $nombre_enviado) {
					if (strtoupper($nombre_enviado) == strtoupper($name)) {
						$name_validation = 'PARTIALLY TRUE';
						$persona->nombres = str_ireplace($name,'',$persona->nombres);
					}
				}
			}
			
			if (trim($persona->nombres) == '') {
				$name_validation = 'TRUE';
			}

			$result[$key]['valores'] = new \StdClass();
			$result[$key]['valores']->fecha_nacimiento	= $value->fecha_nacimiento;
			$result[$key]['valores']->nombre_persona	= $value->nombre_persona;
			$result[$key]['valores']->dni				= $value->dni;
			$result[$key]['valores']->fecha_defuncion	= $value->fecha_defuncion;
			$result[$key]['valores']->cuit				= $value->identificacion;
			$result[$key]['valores']->telefonos			= $value->telefonos;
			$result[$key]['validacion'] = new \StdClass();
			$result[$key]['validacion']->fecha_nacimiento	= ($fecha_nacimiento == $value->fecha_nacimiento) ? 'TRUE' : 'FALSE';
			$result[$key]['validacion']->nombre_persona		= $name_validation;
			$result[$key]['validacion']->dni				= ($value->dni == $value->dni) ? 'TRUE' : 'FALSE';
			
			//si el dni ingresado no es válido transacciono el consumo con el DNI y sino con el cuit
			if (empty($value->identificacion) || $value->identificacion == NULL) {
				$cuit = $value->dni;
			} else {
				$cuit = $value->identificacion;
			}
		}

		if (empty($response)) {
			$cuit = $dni; 
		}
		$producto = $usuario->producto ?? 71;
		self::consumir_servicio($cuit,$producto); 

		return json_encode([
			'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result
		]);
  	}

  	/**
	 * Naïve implementation of Damerau-Levenshtein distance
	 * (Does not work when there are neighbouring transpositions)!
	*/
	public static function DamerauLevenshtein($S1, $S2) {
		$L1 = strlen($S1);
		$L2 = strlen($S2);
		if ($L1==0 || $L2==0) {
			// Trivial case: one string is 0-length
			return max($L1, $L2);
		} else {
			// The cost of substituting the last character
			$substitutionCost = ($S1[$L1-1] != $S2[$L2-1])? 1 : 0;
			// {H1,H2} are {L1,L2} with the last character chopped off
			$H1 = substr($S1, 0, $L1-1);
			$H2 = substr($S2, 0, $L2-1);
			if ($L1>1 && $L2>1 && $S1[$L1-1]==$S2[$L2-2] && $S1[$L1-2]==$S2[$L2-1]) {
				return min (
					self::DamerauLevenshtein($H1, $S2) + 1,
					self::DamerauLevenshtein($S1, $H2) + 1,
					self::DamerauLevenshtein($H1, $H2) + $substitutionCost,
					self::DamerauLevenshtein(substr($S1, 0, $L1-2), substr($S2, 0, $L2-2)) + 1
				);
			}
			return min (
				self::DamerauLevenshtein($H1, $S2) + 1,
				self::DamerauLevenshtein($S1, $H2) + 1,
				self::DamerauLevenshtein($H1, $H2) + $substitutionCost
			);
		}
	}

	public static function validacionNombre($enviados, $persona){
		$name_validation = 'FALSE';
		$nombre_contains = explode(' ',$enviados['name']);
		
		foreach ($nombre_contains as $name) {
			foreach (explode(' ',$persona->nombres) as $nombre_enviado) {
				if (strtoupper($nombre_enviado) == strtoupper($name)) {
					$name_validation = 'PARTIALLY TRUE';
					$persona->nombres = str_ireplace($name,'',$persona->nombres);
				}
			}
			
		}
		if (trim($persona->nombres) == '') {
			$name_validation = 'TRUE';
		}
		
		if ($name_validation != 'TRUE') {
			foreach ($nombre_contains as $name) {
				foreach (explode(' ',$persona->nombres) as $nombre_enviado) {
					
					$damerau = self::DamerauLevenshtein(strtoupper($nombre_enviado),strtoupper($name));
					
					if ($damerau == 1 || $damerau == 0) {
						$name_validation = 'PARTIALLY TRUE';
						$persona->nombres = str_ireplace($name,'',$persona->nombres);
					}
				}
			}
		}
		
		if (trim($persona->nombres) == '') {
			$name_validation = 'TRUE';
		}
		
		return $name_validation;

	}

	public static function validacionApellido($enviados, $persona){
		$surname_validation = 'FALSE';
		$surname_contains = explode(' ',$enviados['surname']);
		foreach ($surname_contains as $surname) {
			foreach (explode(' ',$persona->apellidos) as $apellido_enviado) {
				if (strtoupper($apellido_enviado) == strtoupper($surname)) {
					$surname_validation = 'PARTIALLY TRUE';
					$persona->apellidos = str_ireplace($surname,'',$persona->apellidos);
				}
			}
		}
		if (trim($persona->apellidos) == '') {
			$surname_validation = 'TRUE';
		}
		if ($surname_validation != 'TRUE') {
			foreach ($surname_contains as $name) {
				foreach (explode(' ',$persona->apellidos) as $apellido_enviado) {
					$damerau = self::DamerauLevenshtein(strtoupper($apellido_enviado),strtoupper($surname));
					if ($damerau == 1 || $damerau == 0) {
						$surname_validation = 'PARTIALLY TRUE';
						$persona->apellidos = str_ireplace($surname,'',$persona->apellidos);
					}
				}
			}
		}
		if (trim($persona->apellidos) == '') {
			$surname_validation = 'TRUE';
		}

		return $surname_validation;
	}

	/**
	 * valida datos personales.
	 * devuelve @json (Parameters,Status,Message,Response)
	*/
	//validacionnotaxid
	public static function validacionnotaxid(){
		$usuario    			= Session::get('usuario');
		$user_id    			= $usuario->user_id;
		$name     				= trim(Request::input('name'));
		$surname     			= trim(Request::input('surname'));
		$dni      				= trim(Request::input('dni'));
		$tax_id    				= trim(Request::input('tax_id'));
		$birthdate   			= trim(Request::input('birthdate'));
		$address   				= trim(Request::input('address'));
		$city	   				= trim(Request::input('city'));
		$state   				= trim(Request::input('state'));
		$telephone   			= trim(Request::input('telephone'));
		$gender   				= trim(Request::input('gender'));
		$enviados['name'] 		= $name;
		$enviados['surname'] 	= $surname;
		$enviados['dni'] 		= $dni;
		$enviados['tax_id'] 	= $tax_id;
		$enviados['birthdate'] 	= $birthdate;
		$enviados['address'] 	= $address;
		$enviados['city'] 		= $city;
		$enviados['state'] 		= $state;
		$enviados['telephone'] 	= $telephone;
		$enviados['gender'] 	= $gender;

		$integridad = 3;
		if($address != '') {$integridad += 1;}

		$fecha_nac = $enviados['birthdate'];

		// estos campos pueden no indicarse verificar que no falle ante la ausencia de los mismos
		if (empty($tax_id) && empty($dni)) {
			/*return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID AND DNI CANNOT BE NULL','Response'=>[]
			]);*/
		}
		if (strlen($name) < 2 || strlen($surname) < 2) {
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME AND SURNAME IS 2','Response'=>[]
			]);
		}
		if (empty($tax_id) && empty($dni)) {
			if (empty($name) || empty($surname) || empty($birthdate)) {
				return json_encode([
					'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID OR DNI CAN BE NOT NULL or NAME/SURNAME AND BIRTHDATE CAN BE NOT NULL','Response'=>[]
				]);
			}
		}

		if (!empty($tax_id)) {
			$taxid_dni = $tax_id;
		} else {
			$taxid_dni = $dni;
		}
		
		$producto = $usuario->producto ?? 71;
		
		if (strlen($tax_id) == 11) {
			AFIPController::obtenerPadron($tax_id,true,'AR',false);
		}
		elseif (!empty($taxid_dni) && strlen($taxid_dni) <= 8) { 			
			/* 01/10/2020 */
			$cuitss = self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
			$tax_id = $cuitss[0]->cuit ?? $tax_id;  
		}

		$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id,$name,$surname,$birthdate),'select');	
		$result = [];
		$cuit = [];
		$encontrados = 0; 
		foreach ($datos as $key => $persona) {
			$encontrados += 1; 
			$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');	
			$nombres = $persona->nombres; 
			$apellidos = $persona->apellidos; 
			$name_validation = self::validacionNombre($enviados, $persona);
			$surname_validation = self::validacionApellido($enviados, $persona);
			$localidad = '';
			$provincia = '';
			$pais = '';
			$address_validation = 'FALSE';
			$full_address = explode(',',$enviados['address']);

			$address_contains = explode(' ',$address);
			foreach ($address_contains as $address_value) {
				if (stripos($info->domicilio,$address_value) !== false) {
					$address_validation = 'TRUE';
				} else {
					$address_validation = 'FALSE';
					break;
				}
			}
	
			$localidad 	= $city ?? '';
			$provincia 	= $state ?? '';
			$pais 		= 'ARGENTINA';
			if ($info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES' || $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES') {
				$info->provicia  = 'CIUDAD AUTONOMA DE BUENOS AIRES';
				$info->localidad = 'CIUDAD AUTONOMA DE BUENOS AIRES';
			}
			if ($address_validation != 'FALSE') {
				if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || ($info->provicia == $provincia && $info->localidad == $localidad ) && $pais = 'ARGENTINA' ){
					$address_validation = 'TRUE';
				} else {
					$address_validation = 'PARTIALLY TRUE';
				}
			}
			
			$birthdate_validation = 'FALSE';
			if ($enviados['birthdate'] == $persona->fecha_nacimiento) {
				$birthdate_validation = 'TRUE';
			}
			
			$dni_validation = 'FALSE';
			if ($enviados['dni'] == $persona->dni) {
				$dni_validation = 'TRUE';
			}
			
			$tax_id_validation = 'FALSE';
			if ($enviados['tax_id'] == $persona->cuit) {
				$tax_id_validation = 'TRUE';
			}
			
			$telephone_validation = 'FALSE';
			$telefono = ''; 
			$telephone_contains = explode(' /',$info->telefonos);
			foreach ($telephone_contains as $key2 => $value) {
				if ($value == $enviados['telephone']) {
					$telephone_validation = 'TRUE';
					$telefono = $value; 
					break; 
				} else if (stripos(trim($value),$enviados['telephone']) !== false || stripos('11'.trim($value),$enviados['telephone']) !== false) {
					$telephone_validation = 'PARTIALLY TRUE'; 
					$telefono = $value; 
					break; 
				}
			}

			if ($telefono == '' && isset($telephone_contains[0])) {
				$telefono = $telephone_contains[0]; 
			}
		
			$gender_validation = 'FALSE';
			if (strtoupper($enviados['gender']) == strtoupper($persona->sexo)) {
				$gender_validation = 'TRUE';
			}

			$result[$key] = new \StdClass();
			$result[$key]->dni				= $dni_validation;
			$result[$key]->tax_id			= $tax_id_validation;
			$result[$key]->birthdate		= $persona->fecha_nacimiento ?? '';
			$result[$key]->name				= $name_validation;
			$result[$key]->surname			= $surname_validation;
			$result[$key]->gender			= $gender_validation;
			$result[$key]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
			$result[$key]->address			= $address_validation;
			$result[$key]->street_name		= $info->domicilio ?? ''; 
			$result[$key]->city				= $info->localidad ?? ''; 
			$result[$key]->state			= $info->provicia ?? '';
			$result[$key]->zip				= $info->codpos ?? '';
			$result[$key]->telephone		= trim($telefono)  ?? '';
			$result[$key]->last_name		= $apellidos ?? '';
			$result[$key]->first_name		= $nombres ?? '';
			$result[$key]->tax_id_number    = $persona->cuit;
			$result[$key]->nationalid       = $persona->dni;
			$result[$key]->transaction_id 	= $resp->transaction_id ?? 0;
			$result[$key]->integrity = 100;

			$cuit[$key] = $persona->cuit; 
		}

		$resultado = []; 
		$cant = []; 
		
		// Si hay muchos, elige el que tiene mas campos TRUE o PARTIALLY TRUE 
		if ($encontrados <= 1 ) {	
			foreach ($result as $key2 => $value) {
				// valores para generar la integridad
				$valores = 0;
				if ($value->birthdate == $fecha_nac) { 
					$valores += 100;
				} elseif ($value->birthdate !== '') { 
					$valores += 50; 
				}

				if ($value->name == 'TRUE') { 
					$valores += 100;
				} elseif ($value->name == 'PARTIALLY TRUE') { 
					$valores += 50;
				}

				if ($value->surname	== 'TRUE' || $value->surname == 'PARTIALLY TRUE')  { 
					$valores += 100;
				}

				if ($value->address == 'TRUE' || $value->address == 'PARTIALLY TRUE') { 
					$valores += 100;
				}
				$value->integrity = round(($valores / $integridad),2);
			}
			$resultado = $result; 
			if ($encontrados == 1) {
				$resp = self::consumir_servicio($result[0]->tax_id_number,$producto);
				$resultado[0]->transaction_id = $resp->transaction_id ?? 0;
			}
		} else {
			$mas_iguales = 0; 
			$mas_iguales_key = 0; 
			foreach ($result as $key2 => $value) {
				// valores para generar la integridad
				$valores = 0;
				$cant_iguales = 0; 
				if ($value->dni	== 'TRUE' || $value->dni == 'PARTIALLY TRUE')  { 
					$cant_iguales += 1; 
				}

				if ($value->tax_id == 'TRUE' || $value->tax_id == 'PARTIALLY TRUE')  { 
					$cant_iguales += 1; 
				}

				if ($value->birthdate == $fecha_nac) { 
					$valores += 100;
				} elseif ($value->birthdate !== '') { 
					$valores += 50; 
				}

				if ($value->name == 'TRUE') { 
					$cant_iguales += 1; $valores += 100;
				} elseif ($value->name == 'PARTIALLY TRUE') { 
					$cant_iguales += 1; 
					$valores += 50;
				}

				if ($value->surname	== 'TRUE' || $value->surname == 'PARTIALLY TRUE')  { 
					$cant_iguales += 1; 
					$valores += 100;
				}

				if ($value->address == 'TRUE' || $value->address == 'PARTIALLY TRUE') { 
					$cant_iguales += 1; 
					$valores += 100;
				}

				if ($value->telephone == 'TRUE' || $value->telephone == 'PARTIALLY TRUE')  { 
					$cant_iguales += 1; 
				}

				if ($value->gender == 'TRUE' ||	$value->gender == 'PARTIALLY TRUE')  { 
					$cant_iguales += 1; 
				}

				if ($value->deceased == 'TRUE' || $value->deceased == 'PARTIALLY TRUE')  { 
					$cant_iguales += 1; 
				}

				$value->integrity = round(($valores / $integridad),2);
				$cant[$key2] = $cant_iguales; 
			}
			/* 02/07/2021: Se cambió para que devuelva varios registros si encuentra mas de 1, máximo 5 */
			array_multisort($cant, SORT_DESC, $result);
			foreach ($result as $key2 => $value) {
				$resultado[$key2] = $result[$key2];
				$resp = self::consumir_servicio($value->tax_id_number,$producto);
				$resultado[$key2]->transaction_id 	= $resp->transaction_id ?? 0;
				if ($key2 == 4) {
					break; 
				}
			}
		}
		//-> para debug, agregar a la respuesta del json antes del 'Status' = 'Parameters'=>$enviados,
		$temporal = array();

		foreach ($resultado as $key => $val) {
			$temporal[] = array(
				'street_name' => $val->street_name, 
				'city' => $val->city, 
				'state' => $val->state, 
				'zip' => $val->zip, 
				'telephone' => $val->telephone, 
				'last_name' => $val->last_name,
				'first_name' => $val->first_name, 
				'tax_id_number' => $val->tax_id_number, 
				'nationalid' => $val->nationalid, 
				'birthdate' => $val->birthdate, 
				'transaction_id' => $val->transaction_id, 
				'integrity' => $val->integrity
			);
		}

		$resultado = $temporal;

		return json_encode([
			'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$resultado
		]);

	}
	

	//-- Api Demo Claudio  caso Trulioo  --//
	public static function validacionnotaxid_cla(){
		$usuario    			= Session::get('usuario');
		$user_id    			= $usuario->user_id;
		$name     				= trim(Request::input('name'));
		$surname     			= trim(Request::input('surname'));
		$dni      				= trim(Request::input('dni'));
		$tax_id    				= trim(Request::input('tax_id'));
		$birthdate   			= trim(Request::input('birthdate'));
		$address   				= trim(Request::input('address'));
		$city	   				= trim(Request::input('city'));
		$state   				= trim(Request::input('state'));
		$telephone   			= trim(Request::input('telephone'));
		$gender   				= trim(Request::input('gender'));
		$enviados['name'] 		= $name;
		$enviados['surname'] 	= $surname;
		$enviados['dni'] 		= $dni;
		$enviados['tax_id'] 	= $tax_id;
		$enviados['birthdate'] 	= $birthdate;
		$enviados['address'] 	= $address;
		$enviados['city'] 		= $city;
		$enviados['state'] 		= $state;
		$enviados['telephone'] 	= $telephone;
		$enviados['gender'] 	= $gender;

		$integridad = 3;
		if($address != '') {$integridad += 1;}

		$fecha_nac = $enviados['birthdate'];

		// estos campos pueden no indicarse verificar que no falle ante la ausencia de los mismos
		if(empty($tax_id) && empty($dni)) {
			/*return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID AND DNI CANNOT BE NULL','Response'=>[]
			]);*/
		}
		if(strlen($name) < 2 || strlen($surname) < 2){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME AND SURNAME IS 2','Response'=>[]
			]);
		}
		if(empty($tax_id) && empty($dni)) {
			if(empty($name) || empty($surname) || empty($birthdate)) {
				return json_encode([
					'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID OR DNI CAN BE NOT NULL or NAME/SURNAME AND BIRTHDATE CAN BE NOT NULL','Response'=>[]
				]);
			}
		}

		if(!empty($tax_id)) {
			$taxid_dni = $tax_id;
		}
		else {
			$taxid_dni = $dni;
		}

		$producto       = $usuario->producto ?? 71;
		
		if(strlen($tax_id) == 11){
			AFIPController::obtenerPadron($tax_id,true,'AR',false);
		}
		/* 01/10/2020 */
		elseif (!empty($taxid_dni) && strlen($taxid_dni) <= 8) { 
			$cuitss = self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
			$tax_id = $cuitss[0]->cuit ?? $tax_id ;
		}

		$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id,$name,$surname,$birthdate),'select');	
		$result = [];
		$cuit = [];
		$encontrados = 0; 
		foreach($datos as $key => $persona){
			$encontrados += 1; 
			$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');	
			$nombres = $persona->nombres; 
			$apellidos = $persona->apellidos; 
			$name_validation = self::validacionNombre($enviados, $persona);
			$surname_validation = self::validacionApellido($enviados, $persona);
			$localidad = '';
			$provincia = '';
			$pais = '';
			$address_validation = 'FALSE';
			$full_address = explode(',',$enviados['address']);

			$address_contains = explode(' ',$address);
			foreach($address_contains as $address_value){
				if(stripos($info->domicilio,$address_value) !== false){
					$address_validation = 'TRUE';
				}else{
					$address_validation = 'FALSE';
					break;
				}
			}
	
			$localidad 	= $city ?? '';
			$provincia 	= $state ?? '';
			$pais 		= 'ARGENTINA';
			if($info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES' || $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES'){
				$info->provicia  = 'CIUDAD AUTONOMA DE BUENOS AIRES';
				$info->localidad = 'CIUDAD AUTONOMA DE BUENOS AIRES';
			}
			if($address_validation != 'FALSE'){
				if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || ($info->provicia == $provincia && $info->localidad == $localidad ) && $pais = 'ARGENTINA' ){
					$address_validation = 'TRUE';
				}else{
					$address_validation = 'PARTIALLY TRUE';
				}
			}
			
			$birthdate_validation = 'FALSE';
			if($enviados['birthdate'] == $persona->fecha_nacimiento){
				$birthdate_validation = 'TRUE';
			}
			
			$dni_validation = 'FALSE';
			if($enviados['dni'] == $persona->dni){
				$dni_validation = 'TRUE';
			}
			
			$tax_id_validation = 'FALSE';
			if($enviados['tax_id'] == $persona->cuit){
				$tax_id_validation = 'TRUE';
			}
			
			$telephone_validation = 'FALSE';
			$telefono = ''; 
			$telephone_contains = explode(' /',$info->telefonos);
			foreach ($telephone_contains as $key2 => $value) {
				if($value == $enviados['telephone']){
					$telephone_validation = 'TRUE';
					$telefono = $value; 
					break; 
				}else if(stripos(trim($value),$enviados['telephone']) !== false || stripos('11'.trim($value),$enviados['telephone']) !== false){
					$telephone_validation = 'PARTIALLY TRUE'; 
					$telefono = $value; 
					break; 
				}
			}

			if ($telefono == '' && isset($telephone_contains[0])) {
				$telefono = $telephone_contains[0]; 
			}
		
			$gender_validation = 'FALSE';
			if(strtoupper($enviados['gender']) == strtoupper($persona->sexo)){
				$gender_validation = 'TRUE';
			}
			$result[$key] = new \StdClass();
			$result[$key]->dni				= $dni_validation;
			$result[$key]->tax_id			= $tax_id_validation;
			$result[$key]->birthdate		= $persona->fecha_nacimiento ?? '';
			$result[$key]->name				= $name_validation;
			$result[$key]->surname			= $surname_validation;
			$result[$key]->gender			= $gender_validation;
			$result[$key]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
			$result[$key]->address			= $address_validation;
			$result[$key]->street_name		= $info->domicilio ?? ''; 
			$result[$key]->city				= $info->localidad ?? ''; 
			$result[$key]->state			= $info->provicia ?? '';
			$result[$key]->zip				= $info->codpos ?? '';
			$result[$key]->telephone		= trim($telefono)  ?? '';
			$result[$key]->last_name		= $apellidos ?? '';
			$result[$key]->first_name		= $nombres ?? '';
			$result[$key]->tax_id_number    = $persona->cuit;
			$result[$key]->nationalid       = $persona->dni;
			$result[$key]->transaction_id 	= $resp->transaction_id ?? 0;
			$result[$key]->integrity = 100;

			$cuit[$key] = $persona->cuit; 
		}

		$resultado = []; 
		$cant = []; 
		
		// Si hay muchos, elige el que tiene mas campos TRUE o PARTIALLY TRUE 
		if ($encontrados <= 1 ) {	
			foreach ($result as $key2 => $value) {
				// valores para generar la integridad
				$valores = 0;
				if ($value->birthdate == $fecha_nac) { $valores += 100;} elseif ($value->birthdate !== '') { $valores += 50; }
				if ($value->name == 'TRUE') { $valores += 100;} elseif ($value->name == 'PARTIALLY TRUE') { $valores += 50;}
				if ($value->surname	== 'TRUE' || $value->surname == 'PARTIALLY TRUE')  { $valores += 100;}
				if ($value->address == 'TRUE' || $value->address == 'PARTIALLY TRUE') { $valores += 100;}
				$value->integrity = round(($valores / $integridad),2);
			}
			$resultado = $result; 
			if ($encontrados == 1) {
				$resp = self::consumir_servicio($result[0]->tax_id_number,$producto);
				$resultado[0]->transaction_id = $resp->transaction_id ?? 0;
			}
		} else {
			$mas_iguales = 0; 
			$mas_iguales_key = 0; 
			foreach ($result as $key2 => $value) {
				// valores para generar la integridad
				$valores = 0;
				$cant_iguales = 0; 
				if ($value->dni	== 'TRUE' || $value->dni == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
				if ($value->tax_id == 'TRUE' || $value->tax_id == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
				if ($value->birthdate == $fecha_nac) { $valores += 100;} elseif ($value->birthdate !== '') { $valores += 50; }
				if ($value->name == 'TRUE') { $cant_iguales += 1; $valores += 100;} elseif ($value->name == 'PARTIALLY TRUE') { $cant_iguales += 1; $valores += 50;}
				if ($value->surname	== 'TRUE' || $value->surname == 'PARTIALLY TRUE')  { $cant_iguales += 1; $valores += 100;}
				if ($value->address == 'TRUE' || $value->address == 'PARTIALLY TRUE') { $cant_iguales += 1; $valores += 100;}
				if ($value->telephone == 'TRUE' || $value->telephone == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
				if ($value->gender == 'TRUE' ||	$value->gender == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
				if ($value->deceased == 'TRUE' || $value->deceased == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
				$value->integrity = round(($valores / $integridad),2);
				$cant[$key2] = $cant_iguales;
			}
			/* 02/07/2021: Se cambió para que devuelva varios registros si encuentra mas de 1, máximo 5 */
			array_multisort($cant, SORT_DESC, $result);
			foreach ($result as $key2 => $value) {
				$resultado[$key2] = $result[$key2];
				$resp = self::consumir_servicio($value->tax_id_number,$producto);
				$resultado[$key2]->transaction_id 	= $resp->transaction_id ?? 0;
				if ($key2 == 4) {
					break; 
				}
			}
		}
		//-> para debug, agregar a la respuesta del json antes del 'Status' = 'Parameters'=>$enviados,
		$temporal = array();

		foreach ($resultado as $key => $val) {
			$temporal[] = array(
				'street_name' => $val->street_name, 
				'city' => $val->city, 
				'state' => $val->state, 
				'zip' => $val->zip, 
				'telephone' => $val->telephone, 
				'last_name' => $val->last_name,
				'first_name' => $val->first_name, 
				'tax_id_number' => $val->tax_id_number, 
				'nationalid' => $val->nationalid, 
				'birthdate' => $val->birthdate, 
				'transaction_id' => $val->transaction_id, 'integrity' => $val->integrity
			);
		}

		$resultado = $temporal;

		return json_encode([
			'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$resultado
		]);

	}
	
	//--  FUNCIONES AUXILIARES PARA GBG  ----------------------------------------------------------------------------//

	//--  Elimina todo caracter extraño del nombre o apellido pasado y lo devuelve en mayusculas.
	static function nombre_formateo($n) {
		$omitidos = "/^[!\"#$%&\/)(=?¿_*'+-@:.<>]{1}$/";
		$nuevo = '';
		for ($i=0; $i<strlen($n); $i++) {
			if(preg_match($omitidos,$n[$i]) != 1) {
				$nuevo .= $n[$i];
			}
		}
		$nuevo = mb_strtoupper($nuevo);
		/* 05/12/2023 */
		$nuevo = str_replace('Ñ','N',$nuevo);
		$nuevo = self::eliminar_acentos($nuevo);
		/**/
		return trim($nuevo);
	}

	static function limpiarCuit($n) {
		$omitidos = "/^[0-9]{1}$/";
		$nuevo = '';
		for ($i=0; $i<strlen($n); $i++) {
			if(preg_match($omitidos,$n[$i])) {
				$nuevo .= $n[$i];
			}
		}
		return $nuevo;
	}

	static function dni_valido($dni) {
		$exp = "/^[0-9]{7,8}$/";
		return (preg_match($exp, $dni) == 1);
	}

	//-- Normaliza el dni en caso de solo tener longitug 7, le agrega un cero delante.
	static function normalizador_dni($d) {
		if(strlen($d) == 7) {
			return '0'.$d;
		}
		return $d;
	}

	//-- Slo valida que sea un cuit valido sin guion medio ni puntos.
	static function tax_id_valido($tax) {
		$exp = "/^[0-9]{11}$/";
		return (preg_match($exp, $tax) == 1);
	}


	//-- Valida que la fecha ingresada contenga el formato requerido.
	static function fecha_valida($fecha) {
		$fv = "/^[0-9]{4}[-]{1}[0-9]{2}[-]{1}[0-9]{2}$/";
		return (preg_match($fv, $fecha) == 1);
	}

	public static function validacionMati_cla(){
		$usuario    		= Session::get('usuario');
		$user_id    		= $usuario->user_id;
		$cliente     		= $usuario->cliente['client_id'];
		$dni     		= trim(Request::input('dni'));
		$nombre     		= trim(Request::input('nombre'));
		$fecha_nacimiento	= trim(Request::input('fecha_nacimiento'));
		$p_ip 			= $_SERVER['REMOTE_ADDR'];
		$cuit			= "";
		$enviados['dni'] = $dni;
		$enviados['nombre'] = $nombre;
		$enviados['fecha_nacimiento'] = $fecha_nacimiento;
		$producto       = $usuario->producto ?? 71;

		if(empty($dni) || strlen($dni) != 8){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'El campo dni no puede estar vacío y debe ser un número de 8 dígitos','Response'=>[]
				]);
		}

		try {
			
			self::BuscarCuit_clau($dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
		
			$response = SQLConnection::backendStoreProcedure('api_validacion_mati',array($dni),'select');
			$result = [];
		
			foreach ($response as $key => $value) {
				$persona = new \StdClass();
				$persona->nombres = $value->nombre_persona;
				$name_validation = 'FALSE';
				$nombre_contains = explode(' ',$enviados['nombre']);
				foreach ($nombre_contains as $name) {
					foreach (explode(' ',$value->nombre_persona) as $nombre_enviado) {
						if (strtoupper($nombre_enviado) == strtoupper($name)) {
							$name_validation = 'PARTIALLY TRUE';
							$persona->nombres = str_ireplace($name,'',$persona->nombres);
						}
					}
				}
				
				if (trim($persona->nombres) == '') {
					$name_validation = 'TRUE';
				}

				$result[$key]['valores'] = new \StdClass();
				$result[$key]['valores']->fecha_nacimiento	= $value->fecha_nacimiento;
				$result[$key]['valores']->nombre_persona	= $value->nombre_persona;
				$result[$key]['valores']->dni				= $value->dni;
				$result[$key]['valores']->fecha_defuncion	= $value->fecha_defuncion;
				$result[$key]['valores']->cuit				= $value->identificacion;
				$result[$key]['valores']->telefonos			= $value->telefonos;
				$result[$key]['validacion'] = new \StdClass();
				$result[$key]['validacion']->fecha_nacimiento	= ($fecha_nacimiento == $value->fecha_nacimiento) ? 'TRUE' : 'FALSE';
				$result[$key]['validacion']->nombre_persona		= $name_validation;
				$result[$key]['validacion']->dni				= ($value->dni == $value->dni) ? 'TRUE' : 'FALSE';
				
				//si el dni ingresado no es válido transacciono el consumo con el DNI y sino con el cuit
				if (empty($value->identificacion) || $value->identificacion == NULL) {
					$cuit=$value->dni;
				} else {
					$cuit=$value->identificacion;
				}
			}

			if (empty($response)) {
				$cuit = $dni; 
			}

			//SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$cuit,$producto,$p_ip),'selectOne');
			$producto = $usuario->producto ?? 71;
			//self::consumir_servicio($cuit,$producto); //--> linea comentada para no guardar el consumo, solo para pruebas.

			return json_encode([
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result
			]);

		} catch (\Throwable $th) {
			$mensaje = 'Error al consultar API validacionMati fidelitas-www <br>Producto: '.$producto.'<br>Cliente: '.$cliente.'<br>User_Id: '.$user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
			Misc::enviarMail_errores_api($mensaje);
			return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'TIMEOUT EXCEEDED.']);
		}
		
		
  	}

	//---------------------------------------------------------------------------------------------------------------//
	// 06/12/2023: Con el producto 109, busca en renaper
	//---------------------------------------------------------------------------------------------------------------//


	public static function validacionGBG_v2(){
		$usuario    			= Session::get('usuario');
		$user_id    			= $usuario->user_id;
		$name     				= trim(Request::input('name'));
		$surname     			= trim(Request::input('surname'));
		$dni      				= trim(Request::input('dni'));
		$tax_id    				= trim(Request::input('tax_id'));
		$birthdate   			= trim(Request::input('birthdate'));
		$address   				= trim(Request::input('address'));
		$telephone   			= trim(Request::input('telephone'));
		$gender   				= trim(Request::input('gender'));
		//--- Modificacion 24/09/2021
		$street_name 			= trim(Request::input('street_name'));
		$street_number 			= trim(Request::input('street_number'));
		$floor 					= trim(Request::input('floor'));
		$apartment 				= trim(Request::input('apartment'));
		$city 					= trim(Request::input('city'));
		$state					= trim(Request::input('state'));
		$country_code			= trim(Request::input('country_code'));
		$idReg			= trim(Request::input('idReg'));

		//---
		$enviados['name'] 		= self::nombre_formateo($name);
		$enviados['surname'] 	= self::nombre_formateo($surname);
		$enviados['dni'] 		= self::normalizador_dni($dni);
		$enviados['tax_id'] 	= $tax_id;
		$tax_id = (isset($tax_id) && self::tax_id_valido($tax_id)) ? $tax_id : '';
		$enviados['birthdate'] 	= $birthdate;
		$enviados['address'] 	= mb_strtoupper($address);
		$enviados['telephone'] 	= $telephone;
		$enviados['gender'] 	= $gender;
		//------Modificacion 24/09/2021
		$enviados['street_name']= $street_name;
		$enviados['street_number']= $street_number;
		$enviados['floor']      = $floor;
		$enviados['apartment']  = $apartment;
		$enviados['city']       = $city;
		$enviados['state']       = $state;
		$enviados['country_code']= $country_code;
		//------
		$integridad = 0;
		$name_validation = 'FALSE';
		$surname_validation = 'FALSE';

		$p_url    = $_SERVER['REQUEST_URI'];
		$consulta = SQLConnection::backendStoreProcedure('guardar_parametros_API',array($user_id,$name,$surname,$dni,$tax_id,$birthdate,$address,$telephone,$gender,$p_url),'selectOne');

		if (self::fecha_valida($enviados['birthdate']) && self::dni_valido($enviados['dni'])) {
			
			if (empty($tax_id) && empty($dni)) {
				return json_encode(['Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID AND DNI CANNOT BE NULL','Response'=>[]]);
			}

			if (strlen($name) < 2 || strlen($surname) < 2) {
					return json_encode([
						'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME AND SURNAME IS 2','Response'=>[]
					]);
			}

			if (!empty($tax_id)) {
				$taxid_dni = $tax_id;
			} else {
				$taxid_dni = $dni;
			}
			$producto       = $usuario->producto ?? 71;
/* 06/12/2023 */
if ($producto == 109)
{
	$renaper = json_decode(self::soloRenaperGBG($dni,$gender));
	if (!$gender)
	{
		$renaper_datos = $renaper->Response; 
		$gender = $renaper_datos->gender; 
	}

	$datos_renaper = SQLConnection::backendStoreProcedure('RENAPER_BUSCAR',array($dni,$gender),'select');
	$datos = [];
	if ($datos_renaper)
	{
		$datos[0] = $datos_renaper[0];
	}
}
ELSE 
{
			if (!empty($tax_id) && strlen($tax_id) == 11) {
				//AFIPController::obtenerPadronForzado($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
				AFIPController::obtenerPadron($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
			} elseif (!empty($taxid_dni) && strlen($taxid_dni) == 8) { 
				$cuitss = self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				//echo(var_dump($cuitss)); die();
				$tax_id = $cuitss[0]->cuit ?? $tax_id ;
			} 

			//$datos = SQLConnection::backendStoreProcedure('validar_gbg',array($dni,$tax_id),'select');	
			$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id),'select');

			if (count($datos) == 0) {
				$cuitss = self::BuscarCuit_Forzado($dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$cuitss[0]->cuit),'select');
			}
			/* 26/07/2021 Si no devuelve nada, guardamos con lo que busco, sino Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
			if (sizeOf($datos) < 1) {
				$resp = self::consumir_servicio($taxid_dni,$producto);
			}
}

			$result = [];
			//----------------------------------------------------
			$address_validation = 'FALSE';
			$address_complete_validation = 'FALSE';
			$dni_validation = 'FALSE';
			$tax_id_validation = 'FALSE';
			$birthdate_validation = 'FALSE';
			$telephone_validation = 'FALSE';
			$gender_validation = 'FALSE';
			$pcia_validation = 'FALSE';
			//----------------------------------------------------


			foreach ($datos as $key => $persona) {
				
				
				/* 06/12/2023 */
				$info = new \StdClass();
				if ($producto == 109)
				{
					$persona->nombres 		= self::nombre_formateo($persona->nombres);
					$persona->apellidos 	= self::nombre_formateo($persona->apellido);
					if ($persona->fechaNacimiento)
					{
						$fecha_nacimiento = substr($persona->fechaNacimiento,6,4) . '-' . substr($persona->fechaNacimiento,3,2) . '-' . substr($persona->fechaNacimiento,0,2);
					}
					else 
					{
						$fecha_nacimiento = ''; 
					}
					//$fecha_nacimiento = substr($persona->fechaNacimiento,6,4) . '-' . substr($persona->fechaNacimiento,3,2) . '-' . substr($persona->fechaNacimiento,0,2);
					$persona->fecha_nacimiento = $fecha_nacimiento;
					$persona->sexo = $persona->sexo;
					$persona->cuit = $persona->identificacion;
					$persona->dni = $persona->dni;
					if ($persona->fechaf)
					{
						$fecha_fallecimiento = substr($persona->fechaf,6,4) . '-' . substr($persona->fechaf,3,2) . '-' . substr($persona->fechaf,0,2);
					}
					else 
					{
						$fecha_fallecimiento = '';
					}
					$persona->fecha_fallecimiento = $fecha_fallecimiento;
					
					$info->taxid = $persona->identificacion;
					$info->tipo = null;
					$info->nombre = $persona->apellidos ?? ''. ' ' . $persona->nombres ?? '';
					$calle = $persona->calle ?? '';
					$numero = $persona->numero ?? '';
					$piso = $persona->piso ?? '';
					$departamento = $persona->departamento ?? '';
					$domicilio = $calle . ' ' . $numero . ' ' . $piso . ' ' . $departamento;
					$domicilio = str_replace('    ',' ',$domicilio);
					$domicilio = str_replace('   ',' ',$domicilio);
					$domicilio = trim($domicilio);

					$info->domicilio = str_replace('  ',' ',$domicilio);
					$info->localidad = ($persona->ciudad && $persona->ciudad !== NULL) ? $persona->ciudad : ($persona->municipio ?? '');
					$info->provicia = $persona->provincia;
					$info->codpos = $persona->cpostal;
					$info->telefonos = null;
					$info->actividades = null;
					$info->empleadores = null;
					$info->monotributo = null;
					$info->autonomo = null;
					$info->emails = null;
					$info->es_empleador = null;
					$info->facturas_apocrifas = null;

				}
				else 
				{	
					/* 05/12/2023 */
					$persona->nombres 		= self::nombre_formateo($persona->nombres);
					$persona->apellidos 	= self::nombre_formateo($persona->apellidos);
					$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');
				}

				/* 26/07/2021 Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
				$resp = self::consumir_servicio($persona->cuit,$producto);
				/**/

				$name_validation = self::validacionNombre($enviados, $persona);
				
				$surname_validation = self::validacionApellido($enviados, $persona);
				
				$localidad = '';
				$provincia = '';
				$pais = '';
				$address_validation = 'FALSE';

				$info->domicilio = self::eliminar_acentos($info->domicilio);
				$info->provicia = self::eliminar_acentos($info->provicia);
				$info->localidad = self::eliminar_acentos($info->localidad);
				
				$full_address = explode(',',$enviados['address']);
				
				if (sizeOf($full_address) > 0) {

					//$domicilio = $info->domicilio; //-> SE COMENTA Y AGREGA LA LINEA DE ABAJO PARA SOLUCIONAR PROBLEMA E RESPUESTA DE AFIP
					$domicilio = html_entity_decode($info->domicilio); //-> ESTO SE AGREGO PARA CONVERTIR CODIGO HTML QUE ENVIA AFIP EN LA RESPUESTA, GENRABA PROBLEMAS EN LA RESPUESTA JSON
					// Elimino blancos 
					$domicilio = trim($domicilio); 
					while (strpos($domicilio,'  ') !== false) {
						$domicilio = str_replace('  ',' ',$domicilio); 
					}
					
					$full_address[0] = trim($full_address[0]); 
					while (strpos($full_address[0] ,'  ') !== false) {
						$full_address[0] = str_replace('  ',' ',$full_address[0] ); 
					}

					// Comparo si el domicilio es exactamente igual
					if ($full_address[0] == $domicilio && $domicilio != '') { 
						$address_validation = 'TRUE';} 
					else {
						// Comparamos que no haya palabras o partes distintas 
						$address_contains = explode(' ',$full_address[0]);
						foreach ($address_contains as $address_value) {
							if ($address_value == '') { 
								continue; 
							}
							
							if (stripos($domicilio,$address_value) !== false && strlen($address_value) > 1) {
								if ($address_validation !== 'PARTIALLY TRUE') { 
									$address_validation = 'TRUE';
								}
								$domicilio = str_ireplace($address_value,'',$domicilio);
							} else {
								// Tiene algo distinto y era verdadero, pasa a ser parcialmente 
								if ($address_validation == 'TRUE') {
									$address_validation = 'PARTIALLY TRUE';
								}
							}
						}
						// Si termina de comparar y en domicilio todavia le queda algo, es porque el de la BD tiene mas cosas
						$domicilio = trim($domicilio); 
						if ($address_validation == 'TRUE' && $domicilio !== '') {
							$address_validation = 'PARTIALLY TRUE';
						}
					}
					
					$localidad 	= (isset($full_address[1])) ? strtoupper(trim($full_address[1])) : '';
					$provincia 	= (isset($full_address[2])) ? strtoupper(trim($full_address[2])) : '';
					$pais 		= (isset($full_address[3])) ? trim($full_address[3]) : 'ARGENTINA';
					
					if ($info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' || $info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES' || $info->provicia == 'CIUDAD BUENOS AIRES' ) {
						$info->provicia  = 'CIUDAD AUTONOMA DE BUENOS AIRES';
					}

					if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || $info->provicia == $provincia){
						$pcia_validation = 'TRUE';
					} 

					if ($address_validation == 'TRUE') {
						if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || ($info->provicia == $provincia && $info->localidad == $localidad ) && $pais = 'ARGENTINA' ){
							$address_validation = 'TRUE';
						} else {
							$address_validation = 'PARTIALLY TRUE';
						}
					}
				}

				//$birthdate_validation = 'FALSE'; //--> esto se lleva mas arriba.
				if($enviados['birthdate'] == $persona->fecha_nacimiento){
					$birthdate_validation = 'TRUE';
					$integridad += 100;
				}
				
				//$dni_validation = 'FALSE';  //--> esto se lleva mas arriba.
				if($enviados['dni'] == $persona->dni){
					$dni_validation = 'TRUE';
					$integridad += 100;
				}
				
				//$tax_id_validation = 'FALSE'; //--> esto se lleva mas arriba.
				if($enviados['tax_id'] == $persona->cuit){
					$tax_id_validation = 'TRUE';
				}
				
				//$telephone_validation = 'FALSE'; //--> esto se lleva mas arriba.
				$telephone_contains = explode(' /',$info->telefonos);
				foreach ($telephone_contains as $key2 => $value) {
					if ($value == $enviados['telephone'] && $enviados['telephone'] != '') {
						$telephone_validation = 'TRUE';
					} else if (stripos(trim($value),$enviados['telephone']) !== false || stripos('11'.trim($value),$enviados['telephone']) !== false) {
						$telephone_validation = 'PARTIALLY TRUE'; 
					} else {
						$telephone_validation = 'FALSE';
					}
				}
				//$gender_validation = 'FALSE';  //--> esto se lleva mas arriba.
				if (strtoupper($enviados['gender']) == strtoupper($persona->sexo)) {
					$gender_validation = 'TRUE';
				}
				
				//------------ MODIFICACION 24/09/2021
				$address_complete_validation = 'FALSE';
				//---- EL STORE QUE DEVUELVE EL LOS DATOS DEL DOMICILIO COMPLETO
				$datos_domicilios = SQLConnection::backendStoreProcedure('api_domicilios',array($persona->cuit));
				//-----
				$registro_elegido = [];
				//----- EL REGISTRO ELEGIDO ES DEL TIPO L
				foreach ($datos_domicilios as $key => $value) {
					if ($value->address_type == 'L') {
						$registro_elegido = $datos_domicilios[$key];
						break;
					}
				}
				//---------- SI NO HAY UN DOMICILIO TIPO L , AGARRA EL PRIMER REGISTRO
				if (empty($registro_elegido)) {
					$registro_elegido = (count($datos_domicilios) == 0 || is_null($datos_domicilios)) ? '' : $datos_domicilios[0];
				}
				//---- EN ESTE CONDICION CAMBIA EL NOMBRE SI ES CIUDAD AUTONOMA DE BUENOS AIRES, PARA PODER HACER LA COMPARACION CON EL REGISTRO OBTENIDO
				if (strtoupper($enviados['state']) == 'CABA' or strtoupper($enviados['state']) == 'CIUDAD AUTONOMA DE BUENOS AIRES' or strtoupper($enviados['state']) == 'CAPITAL FEDERAL') {
					$enviados['state'] = 'CIUDAD AUTONOMA BUENOS AIRES';
				}
				try {
					//---- DEFENIENDO LAS FUNCION LEVENSHTEIN
					$levenshtein_nombre_calle = levenshtein(strtoupper((strlen($enviados['street_name']) > 0) ? $enviados['street_name'] : 'null'),$registro_elegido->street_name);
					$levenshtein_provincia = levenshtein(strtoupper($enviados['state']),$registro_elegido->state);
					$levenshtein_localidad = levenshtein(strtoupper($enviados['city']),$registro_elegido->city);	
				} catch (\Throwable $th) {
					$levenshtein_nombre_calle = 2;
					$levenshtein_provincia = 2;
					$levenshtein_localidad = 2;
					$objTemporal = new \StdClass();
					$objTemporal->country_code = 'FALSE';
					$objTemporal->street_number = 'FALSE';
					$objTemporal->floor = 'FALSE';
					$objTemporal->appartment = 'FALSE';
					$registro_elegido = $objTemporal;
				}
				//---- COMIENZO DE LA VALIDACION DEL DOMICILIO COMPLETO
				//----- SI EL PAIS ES VALIDO
				if (strtoupper($enviados['country_code']) == $registro_elegido->country_code){
					//---- SI EL NOMBRE DE LA CALLE ES VALIDO
					if ( $levenshtein_nombre_calle == 1 or $levenshtein_nombre_calle == 0 ){
						//----- SI LA PROVINCIA ES VALIDA 
						if ( $levenshtein_provincia == 0 or $levenshtein_provincia == 1 ){
							//---- SI LA LOCALIDAD ES VALIDA
							if ( $levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES' )){
								//---- SI LA ALTURA ES VALIDA
								if (strtoupper($enviados['street_number']) == $registro_elegido->street_number){
									//---- SI TIENE PISO
									if ($registro_elegido->floor != NULL){
										//---- SI EL PISO ES VALIDO
										if (strtoupper($enviados['floor']) == $registro_elegido->floor){
											//---- SI TIENE DEPARTAMENTO
											if ($registro_elegido->appartment != NULL){
												//---- SI EL DEPARTAMENTO ES VALIDO O NO
												if (strtoupper($enviados['apartment']) == $registro_elegido->appartment){
													$address_complete_validation = 'TRUE';	
												} else {
													$address_complete_validation = 'PARTIALLY TRUE';	
												}
											} else {
												//---- SI NO TIENE DEPARTAMENTO
												$address_complete_validation = 'TRUE';	
											}
										} else {
											//--- SI EL PISO ES INVALIDO
											$address_complete_validation = 'PARTIALLY TRUE';
										}
									} else {
										//--- SI NO TIENE PISO
										$address_complete_validation = 'TRUE';
									}
								} else {
									//---- SI LA ALTURA ES INVALIDA
									$address_complete_validation = 'PARTIALLY TRUE';
								}
							} else {
								//------ SI LA LOCALIDAD ES INVALIDA
								$address_complete_validation = 'FALSE';
							}
						} else {
							//--- SI LA PROVINCIA ES INVALIDA
							$address_complete_validation = 'FALSE';		
						}
					} else {
						//--- SI LA CALLE NO ES INVALIDA
						$address_complete_validation = 'FALSE';	
					}
				} else {
					//--- SI EL PAIS ES INVALIDO
					$address_complete_validation = 'FALSE';
				}

								//-------------------------------------- FIN DE MODIFICACION 24/09/2021
				//---------MODIFICACION 02/12/2021
				//------- COMIENZO DE VALIDACION INDIVIDUAL DEL DOMICILIO
				//-- VALIDACION DE CODIGO PAIS


				$country_code_validation = 'FALSE';
				$street_name_validation = 'FALSE';
				$state_validation = 'FALSE';
				$city_validation = 'FALSE' ;
				$street_number_validation = 'FALSE';
				$floor_validation = 'FALSE';
				$apartment_validation = 'FALSE';

if ($enviados['country_code'] && $enviados['country_code'] !== '')
{
				$country_code_validation = (strtoupper($enviados['country_code']) == $registro_elegido->country_code) ? 'TRUE' : 'FALSE';
}
				//-- VALIDACION DEL NOMBRE DE CALLE
if ($enviados['street_name'] && $enviados['street_name'] !== '')
{
				$street_name_validation = ( $levenshtein_nombre_calle == 1) ? 'TRUE' : (($levenshtein_nombre_calle == 0) ? 'TRUE' : 'FALSE');
}

				//-- VALIDACION DEL NOMBRE DE PROVINCIA
if ($enviados['state'] && $enviados['state'] !== '')
{
				$state_validation = ($levenshtein_provincia == 0 or $levenshtein_provincia == 1) ? 'TRUE' : 'FALSE';
}
				//-- VALIDACION DE NOMBRE DE LOCALIDAD
if ($enviados['city'] && $enviados['city'] !== '')
{
				$city_validation = ($levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES')) ? 'TRUE' : 'FALSE' ;
}
				//-- VALIDACION DE ALTURA DE CALLE
if ($enviados['city'] && $enviados['city'] !== '')
{
				$street_number_validation = (strtoupper($enviados['street_number']) == $registro_elegido->street_number) ? 'TRUE' : 'FALSE';
}
if ($enviados['floor'] && $enviados['floor'] !== '')
{
				//-- VALIDACION DE PISO , SI EXISTE
				if ($registro_elegido->floor != NULL){
					$floor_validation = (strtoupper($enviados['floor']) == $registro_elegido->floor) ? 'TRUE' : 'FALSE';
				}
}
				//-- VALIDACION DE DEPARTAMENTO
if ($enviados['apartment'] && $enviados['apartment'] !== '')
{
				if ($registro_elegido->appartment != NULL){
					$apartment_validation = (strtoupper($enviados['apartment']) == $registro_elegido->appartment) ? 'TRUE' : 'FALSE';
				}
}
				//--------- FIN DE MODIFICACION


				$result[2] = new \StdClass();
				$result[2]->dni				= $dni_validation;
				$result[2]->tax_id			= $tax_id_validation;
				$result[2]->birthdate		= $birthdate_validation;
				$result[2]->name				= $name_validation;
				$result[2]->surname			= $surname_validation;
				$result[2]->address			= $address_validation;
				//$result[2]->stateV			= $pcia_validation;
				$result[2]->telephone		= $telephone_validation;
				$result[2]->gender			= $gender_validation;
				$result[2]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
				$result[2]->transaction_id 	= $resp->transaction_id;
				$result[2]->legal_address  	    = html_entity_decode($info->domicilio) ?? 'SIN DATOS'; //-> SE AGREGA PARA CONVERTIR CODIFICACION HTML QUE DEVUELVE AFIP
				$result[2]->state 			= $info->provicia ?? 'SIN DATOS';
				$result[2]->city 			= $info->localidad ?? 'SIN DATOS';
				$result[2]->zip 			= $info->codpos ?? 'SIN DATOS';
				//---- MODIFICACION 24/09/2021
				$result[2]->complete_address = $address_complete_validation;
				$result[2]->country_code     = $registro_elegido->country_code ?? 'SIN DATOS';
				$result[2]->street_name      = $registro_elegido->street_name ?? 'SIN DATOS';
				$result[2]->street_number    = $registro_elegido->street_number ?? 'SIN DATOS';
				$result[2]->floor            = $registro_elegido->floor ?? 'SIN DATOS';
				$result[2]->apartment        = $registro_elegido->appartment ?? 'SIN DATOS';
				//---- FIN DE MODIFICACION 
				//---- MODIFICACION 02/12/2021
				
				$result[2]->individual_address_validations = array(
					'country_code_validation' => $country_code_validation,
					'street_name_validation' => $street_name_validation,
					'state_validation' => $pcia_validation,
					'city_validation' => $city_validation,
					'street_number_validation' => $street_number_validation,
					'floor_validation' => $floor_validation ,
					'apartment_validation' => $apartment_validation

				);
				//--- FIN DE MODIFICACION
				SQLConnection::backendStoreProcedure('guardar_parametros_API_2',array($consulta->id,$resp->transaction_id),'selectOne');
			}
			
			if($name_validation == 'TRUE') {
				$integridad += 100;
			} else if ($name_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($surname_validation == 'TRUE') {
				$integridad += 100;
			} else if ($surname_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($address_validation == 'TRUE') {
				$integridad += 100;
			} else if ($address_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($pcia_validation == 'TRUE') {
				$integridad += 100;
			} else if ($pcia_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}


			//---- MODIFICACION 24/09/2021
			if ($address_complete_validation == 'TRUE') {
				$integridad += 100;
			} else if ($address_complete_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}
			//----

			$resultado_integridad = round(($integridad/6),2);

			// idReg
			/*
			try {
				$fresco = array('UPDATELOTE',$dni_validation,$tax_id_validation,$birthdate_validation,$name_validation,$surname_validation,$address_validation,
				$telephone_validation,$gender_validation,$result[2]->deceased ,$resp->transaction_id,$result[2]->legal_address ,$info->provicia,
				$info->localidad,$info->codpos,$address_complete_validation,$registro_elegido->country_code,$result[2]->street_name ,$result[2]->street_number,
				$result[2]->floor ,$result[2]->apartment,null,null,$idReg);	
			} catch (\Throwable $th) {
				$fresco = array('UPDATELOTE',$dni_validation,$tax_id_validation,$birthdate_validation,$name_validation,$surname_validation,$address_validation,
				$telephone_validation,$gender_validation,'null' ,$resp->transaction_id,'null' ,'null',
				'null','null',$address_complete_validation,'null','null' ,'null',
				'null' ,'null',null,null,$idReg);
			}
			SQLConnection::backendStoreProcedure('API_GET_BATCH_LOTE',$fresco,'selectOne');
			*/

			return json_encode([
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result, 'Integrity' => $resultado_integridad.' %'
			]);
		} else {
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'ERROR IN DATA (birthdate OR dni)','Response'=>[]
			]);
		}
	}
	
	public static function idauthentication(){		
		$usuario    	= Session::get('usuario');
		$user_id    	= $usuario->user_id;
		$name     		= trim(Request::input('name'));
		$surname     	= trim(Request::input('surname'));
		$dni      		= trim(Request::input('national_id'));
		$internal_id	= trim(Request::input('internal_id'));		
		$tax_id    		= trim(Request::input('tax_id'));
		$birthdate   	= trim(Request::input('birthdate'));		
		$gender   		= trim(Request::input('gender')); 
		$emision 		= trim(Request::input('issue_date'));
		$expira 		= trim(Request::input('expiry_date'));
		$copy			= trim(Request::input('copy'));		
		
		$enviados['name'] 			= self::nombre_formateo($name);
		$enviados['surname'] 		= self::nombre_formateo($surname);
		$enviados['national_id'] 	= self::normalizador_dni($dni);				 		
		$enviados['internal_id'] 	= $internal_id;
		$enviados['birthdate'] 		= $birthdate;		
		$enviados['gender'] 		= $gender;
		$enviados['issue_date'] 	= $emision;
		$enviados['expiry_date'] 	= $expira;
		$enviados['copy'] 			= $copy;

		$tax_id = (isset($tax_id) && self::tax_id_valido($tax_id)) ? $tax_id : '';
		
		$name_validation = 'FALSE';
		$surname_validation = 'FALSE';

		$p_url    = $_SERVER['REQUEST_URI'];
		
		$consulta = SQLConnection::backendStoreProcedure('guardar_parametros_API',array($user_id,$name,$surname,$dni,null,$birthdate,null,null,$gender,$p_url),'selectOne');
		
		if (self::fecha_valida($enviados['birthdate']) && self::dni_valido($enviados['national_id'])) {
			
			if (empty($tax_id) && empty($dni)) {
				return json_encode(['Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID AND DNI CANNOT BE NULL','Response'=>[]]);
			}

			if (strlen($name) < 2 || strlen($surname) < 2) {
				return json_encode([
					'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME AND SURNAME IS 2','Response'=>[]
				]);
			}

			if (!empty($tax_id)) {
				$taxid_dni = $tax_id;
			} else {
				$taxid_dni = $dni;
			}
			$producto = $usuario->producto ?? 71;

			if ($producto == 109){

				$renaper = json_decode(self::soloRenaperGBG($dni,$gender));
				if(!$gender){
					$renaper_datos = $renaper->Response; 
					$gender = $renaper_datos->gender; 
				}

				$datos_renaper = SQLConnection::backendStoreProcedure('RENAPER_BUSCAR',array($dni,$gender),'select');
				
				$datos = [];
				if ($datos_renaper){
					$datos[0] = $datos_renaper[0];
				}
			}else {
				if (!empty($tax_id) && strlen($tax_id) == 11) {
					AFIPController::obtenerPadron($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
				} elseif (!empty($taxid_dni) && strlen($taxid_dni) == 8) { 
					$cuitss = self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
					$tax_id = $cuitss[0]->cuit ?? $tax_id ;
				} 

				$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id),'select');				

				if (count($datos) == 0) {
					$cuitss = self::BuscarCuit_Forzado($dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
					$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$cuitss[0]->cuit),'select');
				}
				if (sizeOf($datos) < 1) {
					$resp = self::consumir_servicio($taxid_dni,$producto);
				}
			}

			$result = [];
			$dni_validation = 'FALSE';
			$birthdate_validation = 'FALSE';
			$gender_validation = 'FALSE';
			$issue_date = 'FALSE';
			$expiry_date = 'FALSE';
			$ejemplar = 'FALSE';
			$numTramite = "FALSE";
			
			if( !is_null($datos[0]->apellido) && !is_null($datos[0]->nombres) ){
				
				foreach ($datos as $key => $persona) {								
					$info = new \StdClass();
					
					if ($producto == 109){
						
						$persona->nombres = self::nombre_formateo($persona->nombres);
						$persona->apellidos = self::nombre_formateo($persona->apellido);
						$fecha_nacimiento = substr($persona->fechaNacimiento,6,4) . '-' . substr($persona->fechaNacimiento,3,2) . '-' . substr($persona->fechaNacimiento,0,2);
						$persona->fecha_nacimiento = $fecha_nacimiento;
						$persona->sexo = $persona->sexo;
						$persona->cuit = $persona->identificacion;
						$persona->dni = $persona->dni;
						$fecha_fallecimiento = substr($persona->fechaf,6,4) . '-' . substr($persona->fechaf,3,2) . '-' . substr($persona->fechaf,0,2);
						$persona->fecha_fallecimiento = $fecha_fallecimiento;
						$persona->VENCIMIENTO = substr($persona->VENCIMIENTO,6,4) . '-' . substr($persona->VENCIMIENTO,3,2) . '-' . substr($persona->VENCIMIENTO,0,2);
						$persona->expiry_date = $persona->VENCIMIENTO; 
						$persona->EMISION = substr($persona->EMISION,6,4) . '-' . substr($persona->EMISION,3,2) . '-' . substr($persona->EMISION,0,2);
						$persona->issue_date = $persona->EMISION;
						$persona->ID_TRAMITE_PRINCIPAL = "00".$persona->ID_TRAMITE_PRINCIPAL;
						$persona->internal_id = $persona->ID_TRAMITE_PRINCIPAL;  					

						//$info->taxid = $persona->identificacion;
						$info->tipo = null;
						$info->nombre = $persona->apellidos ?? ''. ' ' . $persona->nombres ?? '';	


					}else{						
						$persona->nombres 		= self::nombre_formateo($persona->nombres);
						$persona->apellidos 	= self::nombre_formateo($persona->apellidos);
						$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');
					}

					$resp = self::consumir_servicio($persona->cuit,$producto);					
					$name_validation = self::validacionNombre($enviados, $persona);				
					$surname_validation = self::validacionApellido($enviados, $persona);
									
					if($enviados['birthdate'] == $persona->fecha_nacimiento){
						$birthdate_validation = 'TRUE';
					}
					
					if($enviados['national_id'] == $persona->dni){
						$dni_validation = 'TRUE';
					}				
					
					if (strtoupper($enviados['gender']) == strtoupper($persona->sexo)) {
						$gender_validation = 'TRUE';
					}
					
					if( $enviados['issue_date'] == $persona->issue_date ){
						$issue_date = 'TRUE';
					}

					if( $enviados['expiry_date'] == $persona->expiry_date ){
						$expiry_date = 'TRUE';
					}

					if( $enviados['copy'] == $persona->EJEMPLAR ){
						$ejemplar = 'TRUE';
					}				

					if( $enviados['internal_id'] == $persona->internal_id ){
						$numTramite = 'TRUE';
					}

					$result[2] = new \StdClass();
					$result[2]->dni				= $dni_validation;
					$result[2]->internal_id		= $numTramite;
					$result[2]->birthdate		= $birthdate_validation;
					$result[2]->name			= $name_validation;
					$result[2]->surname			= $surname_validation;				
					$result[2]->gender			= $gender_validation;
					//$result[2]->deceased 		= $persona->fecha_fallecimiento;
					$result[2]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
					$result[2]->issue_date 		= $issue_date;
					$result[2]->expiry_date 	= $expiry_date;
					$result[2]->copy 			= $ejemplar;
					$result[2]->transaction_id 	= $resp->transaction_id;
									
					SQLConnection::backendStoreProcedure('guardar_parametros_API_2',array($consulta->id,$resp->transaction_id),'selectOne');
				}
			}else{
				
				$resp = self::consumir_servicio($dni,$producto);

				$result[2] = new \StdClass();
				$result[2]->dni				= $dni_validation;
				$result[2]->internal_id		= $numTramite;
				$result[2]->birthdate		= $birthdate_validation;
				$result[2]->name			= $name_validation;
				$result[2]->surname			= $surname_validation;				
				$result[2]->gender			= $gender_validation;
				$result[2]->deceased 		= "FALSE";
				$result[2]->issue_date 		= $issue_date;
				$result[2]->expiry_date 	= $expiry_date;
				$result[2]->copy 			= $ejemplar;
				$result[2]->transaction_id 	= $resp->transaction_id;

				SQLConnection::backendStoreProcedure('guardar_parametros_API_2',array($consulta->id,$resp->transaction_id),'selectOne');
			}			
			return json_encode([
				
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result
			]);
		} else {
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'ERROR IN DATA (birthdate OR dni)','Response'=>[]
			]);
		}
	}


	public static function validacionGBG_v2_marita(){
		$usuario    			= Session::get('usuario');
		$user_id    			= $usuario->user_id;
		$name     				= trim(Request::input('name'));
		$surname     			= trim(Request::input('surname'));
		$dni      				= trim(Request::input('dni'));
		$tax_id    				= trim(Request::input('tax_id'));
		$birthdate   			= trim(Request::input('birthdate'));
		$address   				= trim(Request::input('address'));
		$telephone   			= trim(Request::input('telephone'));
		$gender   				= trim(Request::input('gender'));
		//--- Modificacion 24/09/2021
		$street_name 			= trim(Request::input('street_name'));
		$street_number 			= trim(Request::input('street_number'));
		$floor 					= trim(Request::input('floor'));
		$apartment 				= trim(Request::input('apartment'));
		$city 					= trim(Request::input('city'));
		$state					= trim(Request::input('state'));
		$country_code			= trim(Request::input('country_code'));
		$idReg			= trim(Request::input('idReg'));

		//---
		$enviados['name'] 		= self::nombre_formateo($name);
		$enviados['surname'] 	= self::nombre_formateo($surname);
		$enviados['dni'] 		= self::normalizador_dni($dni);
		$enviados['tax_id'] 	= $tax_id;
		$tax_id = (isset($tax_id) && self::tax_id_valido($tax_id)) ? $tax_id : '';
		$enviados['birthdate'] 	= $birthdate;
		$enviados['address'] 	= mb_strtoupper($address);
		$enviados['telephone'] 	= $telephone;
		$enviados['gender'] 	= $gender;
		//------Modificacion 24/09/2021
		$enviados['street_name']= $street_name;
		$enviados['street_number']= $street_number;
		$enviados['floor']      = $floor;
		$enviados['apartment']  = $apartment;
		$enviados['city']       = $city;
		$enviados['state']       = $state;
		$enviados['country_code']= $country_code;
		//------
		$integridad = 0;
		$name_validation = 'FALSE';
		$surname_validation = 'FALSE';

		$p_url    = $_SERVER['REQUEST_URI'];
		$consulta = SQLConnection::backendStoreProcedure('guardar_parametros_API',array($user_id,$name,$surname,$dni,$tax_id,$birthdate,$address,$telephone,$gender,$p_url),'selectOne');

		if (self::fecha_valida($enviados['birthdate']) && self::dni_valido($enviados['dni'])) {
			
			if (empty($tax_id) && empty($dni)) {
				return json_encode(['Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID AND DNI CANNOT BE NULL','Response'=>[]]);
			}

			if (strlen($name) < 2 || strlen($surname) < 2) {
					return json_encode([
						'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME AND SURNAME IS 2','Response'=>[]
					]);
			}

			if (!empty($tax_id)) {
				$taxid_dni = $tax_id;
			} else {
				$taxid_dni = $dni;
			}
			$producto       = $usuario->producto ?? 71;
/* 06/12/2023 */
if ($producto == 109)
{
	$renaper = json_decode(self::soloRenaperGBG($dni,$gender));
	if (!$gender)
	{
		$renaper_datos = $renaper->Response; 
		$gender = $renaper_datos->gender; 
	}

	$datos_renaper = SQLConnection::backendStoreProcedure('RENAPER_BUSCAR',array($dni,$gender),'select');
	$datos = [];
	if ($datos_renaper)
	{
		$datos[0] = $datos_renaper[0];
	}
}
ELSE 
{
			if (!empty($tax_id) && strlen($tax_id) == 11) {
				//AFIPController::obtenerPadronForzado($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
				AFIPController::obtenerPadron($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
			} elseif (!empty($taxid_dni) && strlen($taxid_dni) == 8) { 
				$cuitss = self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				//echo(var_dump($cuitss)); die();
				$tax_id = $cuitss[0]->cuit ?? $tax_id ;
			} 

			//$datos = SQLConnection::backendStoreProcedure('validar_gbg',array($dni,$tax_id),'select');	
			$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id),'select');

			if (count($datos) == 0) {
				$cuitss = self::BuscarCuit_Forzado($dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$cuitss[0]->cuit),'select');
			}
			/* 26/07/2021 Si no devuelve nada, guardamos con lo que busco, sino Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
			if (sizeOf($datos) < 1) {
				$resp = self::consumir_servicio($taxid_dni,$producto);
			}
}

			$result = [];
			//----------------------------------------------------
			$address_validation = 'FALSE';
			$address_complete_validation = 'FALSE';
			$dni_validation = 'FALSE';
			$tax_id_validation = 'FALSE';
			$birthdate_validation = 'FALSE';
			$telephone_validation = 'FALSE';
			$gender_validation = 'FALSE';
			$pcia_validation = 'FALSE';
			//----------------------------------------------------


			foreach ($datos as $key => $persona) {
				
				
				/* 06/12/2023 */
				$info = new \StdClass();
				if ($producto == 109)
				{
					$persona->nombres 		= self::nombre_formateo($persona->nombres);
					$persona->apellidos 	= self::nombre_formateo($persona->apellido);
					$fecha_nacimiento = substr($persona->fechaNacimiento,6,4) . '-' . substr($persona->fechaNacimiento,3,2) . '-' . substr($persona->fechaNacimiento,0,2);
					$persona->fecha_nacimiento = $fecha_nacimiento;
					$persona->sexo = $persona->sexo;
					$persona->cuit = $persona->identificacion;
					$persona->dni = $persona->dni;
					$fecha_fallecimiento = substr($persona->fechaf,6,4) . '-' . substr($persona->fechaf,3,2) . '-' . substr($persona->fechaf,0,2);
					$persona->fecha_fallecimiento = $fecha_fallecimiento;
					
					$info->taxid = $persona->identificacion;
					$info->tipo = null;
					$info->nombre = $persona->apellidos ?? ''. ' ' . $persona->nombres ?? '';
					$calle = $persona->calle ?? '';
					$numero = $persona->numero ?? '';
					$piso = $persona->piso ?? '';
					$departamento = $persona->departamento ?? '';
					$domicilio = $calle . ' ' . $numero . ' ' . $piso . ' ' . $departamento;
					$domicilio = str_replace('    ',' ',$domicilio);
					$domicilio = str_replace('   ',' ',$domicilio);
					$domicilio = trim($domicilio);

					$info->domicilio = str_replace('  ',' ',$domicilio);
					$info->localidad = ($persona->ciudad && $persona->ciudad !== NULL) ? $persona->ciudad : ($persona->municipio ?? '');
					$info->provicia = $persona->provincia;
					$info->codpos = $persona->cpostal;
					$info->telefonos = null;
					$info->actividades = null;
					$info->empleadores = null;
					$info->monotributo = null;
					$info->autonomo = null;
					$info->emails = null;
					$info->es_empleador = null;
					$info->facturas_apocrifas = null;


					$info->domicilio = self::eliminar_acentos($info->domicilio);
					$info->provicia = self::eliminar_acentos($info->provicia);
					$info->localidad = self::eliminar_acentos($info->localidad);

				}
				else 
				{	
					/* 05/12/2023 */
					$persona->nombres 		= self::nombre_formateo($persona->nombres);
					$persona->apellidos 	= self::nombre_formateo($persona->apellidos);
					$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');

					$datos_domicilios = SQLConnection::backendStoreProcedure('api_domicilios',array($persona->cuit));
					//-----
					$registro_elegido = [];
					//----- EL REGISTRO ELEGIDO ES DEL TIPO L
					foreach ($datos_domicilios as $key => $value) {
						if ($value->nombre_fuente == 'RENAPER') { // Es el mas importante, si lo tiene pisa lo que sea y sale
							$registro_elegido = [];
							$registro_elegido = $datos_domicilios[$key];
							break;
						}
						if ($value->address_type == 'F') { // El Fiscar puede pisar al Legal
							$registro_elegido = [];
							$registro_elegido = $datos_domicilios[$key];
						}
						if ($value->address_type == 'L' && empty($registro_elegido)) { // solo toma el Legal si no tengo ninguno de los otros 2
							$registro_elegido = [];
							$registro_elegido = $datos_domicilios[$key];
						}
					}
					if (empty($registro_elegido)) { // Si esta vacio toma el primero
						$registro_elegido = (count($datos_domicilios) == 0 || is_null($datos_domicilios)) ? '' : $datos_domicilios[0];
					}



					$info->domicilio = self::eliminar_acentos($info->domicilio);
					$info->provicia = self::eliminar_acentos($info->provicia);
					$info->localidad = self::eliminar_acentos($info->localidad);




				}

				/* 26/07/2021 Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
				$resp = self::consumir_servicio($persona->cuit,$producto);
				/**/

				$name_validation = self::validacionNombre($enviados, $persona);
				
				$surname_validation = self::validacionApellido($enviados, $persona);
				
				$localidad = '';
				$provincia = '';
				$pais = '';
				$address_validation = 'FALSE';

				
				$full_address = explode(',',$enviados['address']);
				
				if (sizeOf($full_address) > 0) {

					//$domicilio = $info->domicilio; //-> SE COMENTA Y AGREGA LA LINEA DE ABAJO PARA SOLUCIONAR PROBLEMA E RESPUESTA DE AFIP
					$domicilio = html_entity_decode($info->domicilio); //-> ESTO SE AGREGO PARA CONVERTIR CODIGO HTML QUE ENVIA AFIP EN LA RESPUESTA, GENRABA PROBLEMAS EN LA RESPUESTA JSON
					// Elimino blancos 
					$domicilio = trim($domicilio); 
					while (strpos($domicilio,'  ') !== false) {
						$domicilio = str_replace('  ',' ',$domicilio); 
					}
					
					$full_address[0] = trim($full_address[0]); 
					while (strpos($full_address[0] ,'  ') !== false) {
						$full_address[0] = str_replace('  ',' ',$full_address[0] ); 
					}

					// Comparo si el domicilio es exactamente igual
					if ($full_address[0] == $domicilio && $domicilio != '') { 
						$address_validation = 'TRUE';} 
					else {
						// Comparamos que no haya palabras o partes distintas 
						$address_contains = explode(' ',$full_address[0]);
						foreach ($address_contains as $address_value) {
							if ($address_value == '') { 
								continue; 
							}
							
							if (stripos($domicilio,$address_value) !== false && strlen($address_value) > 1) {
								if ($address_validation !== 'PARTIALLY TRUE') { 
									$address_validation = 'TRUE';
								}
								$domicilio = str_ireplace($address_value,'',$domicilio);
							} else {
								// Tiene algo distinto y era verdadero, pasa a ser parcialmente 
								if ($address_validation == 'TRUE') {
									$address_validation = 'PARTIALLY TRUE';
								}
							}
						}
						// Si termina de comparar y en domicilio todavia le queda algo, es porque el de la BD tiene mas cosas
						$domicilio = trim($domicilio); 
						if ($address_validation == 'TRUE' && $domicilio !== '') {
							$address_validation = 'PARTIALLY TRUE';
						}
					}
					
					$localidad 	= (isset($full_address[1])) ? strtoupper(trim($full_address[1])) : '';
					$provincia 	= (isset($full_address[2])) ? strtoupper(trim($full_address[2])) : '';
					$pais 		= (isset($full_address[3])) ? trim($full_address[3]) : 'ARGENTINA';
					
					if ($info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' || $info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES' || $info->provicia == 'CIUDAD BUENOS AIRES' ) {
						$info->provicia  = 'CIUDAD AUTONOMA DE BUENOS AIRES';
					}

					if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || $info->provicia == $provincia){
						$pcia_validation = 'TRUE';
					} 

					if ($address_validation == 'TRUE') {
						if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || ($info->provicia == $provincia && $info->localidad == $localidad ) && $pais = 'ARGENTINA' ){
							$address_validation = 'TRUE';
						} else {
							$address_validation = 'PARTIALLY TRUE';
						}
					}
				}

				//$birthdate_validation = 'FALSE'; //--> esto se lleva mas arriba.
				if($enviados['birthdate'] == $persona->fecha_nacimiento){
					$birthdate_validation = 'TRUE';
					$integridad += 100;
				}
				
				//$dni_validation = 'FALSE';  //--> esto se lleva mas arriba.
				if($enviados['dni'] == $persona->dni){
					$dni_validation = 'TRUE';
					$integridad += 100;
				}
				
				//$tax_id_validation = 'FALSE'; //--> esto se lleva mas arriba.
				if($enviados['tax_id'] == $persona->cuit){
					$tax_id_validation = 'TRUE';
				}
				
				//$telephone_validation = 'FALSE'; //--> esto se lleva mas arriba.
				$telephone_contains = explode(' /',$info->telefonos);
				foreach ($telephone_contains as $key2 => $value) {
					if ($value == $enviados['telephone'] && $enviados['telephone'] != '') {
						$telephone_validation = 'TRUE';
					} else if (stripos(trim($value),$enviados['telephone']) !== false || stripos('11'.trim($value),$enviados['telephone']) !== false) {
						$telephone_validation = 'PARTIALLY TRUE'; 
					} else {
						$telephone_validation = 'FALSE';
					}
				}
				//$gender_validation = 'FALSE';  //--> esto se lleva mas arriba.
				if (strtoupper($enviados['gender']) == strtoupper($persona->sexo)) {
					$gender_validation = 'TRUE';
				}
				
				//------------ MODIFICACION 24/09/2021
				$address_complete_validation = 'FALSE';
				//---- EL STORE QUE DEVUELVE EL LOS DATOS DEL DOMICILIO COMPLETO
				$datos_domicilios = SQLConnection::backendStoreProcedure('api_domicilios',array($persona->cuit));
				//-----
				$registro_elegido = [];
				//----- EL REGISTRO ELEGIDO ES DEL TIPO L
				foreach ($datos_domicilios as $key => $value) {
					if ($value->nombre_fuente == 'RENAPER') {
						$registro_elegido = $datos_domicilios[$key];
						break;
					}
					if ($value->address_type == 'L' && empty($registro_elegido)) {
						$registro_elegido = $datos_domicilios[$key];
					}
				}
				//---------- SI NO HAY UN DOMICILIO TIPO L , AGARRA EL PRIMER REGISTRO
				if (empty($registro_elegido)) {
					$registro_elegido = (count($datos_domicilios) == 0 || is_null($datos_domicilios)) ? '' : $datos_domicilios[0];
				}
				//---- EN ESTE CONDICION CAMBIA EL NOMBRE SI ES CIUDAD AUTONOMA DE BUENOS AIRES, PARA PODER HACER LA COMPARACION CON EL REGISTRO OBTENIDO
				if (strtoupper($enviados['state']) == 'CABA' or strtoupper($enviados['state']) == 'CIUDAD AUTONOMA DE BUENOS AIRES' or strtoupper($enviados['state']) == 'CAPITAL FEDERAL') {
					$enviados['state'] = 'CIUDAD AUTONOMA BUENOS AIRES';
				}
				try {
					//---- DEFENIENDO LAS FUNCION LEVENSHTEIN
					$levenshtein_nombre_calle = levenshtein(strtoupper((strlen($enviados['street_name']) > 0) ? $enviados['street_name'] : 'null'),$registro_elegido->street_name);
					$levenshtein_provincia = levenshtein(strtoupper($enviados['state']),$registro_elegido->state);
					$levenshtein_localidad = levenshtein(strtoupper($enviados['city']),$registro_elegido->city);	
				} catch (\Throwable $th) {
					$levenshtein_nombre_calle = 2;
					$levenshtein_provincia = 2;
					$levenshtein_localidad = 2;
					$objTemporal = new \StdClass();
					$objTemporal->country_code = 'FALSE';
					$objTemporal->street_number = 'FALSE';
					$objTemporal->floor = 'FALSE';
					$objTemporal->appartment = 'FALSE';
					$registro_elegido = $objTemporal;
				}
				//---- COMIENZO DE LA VALIDACION DEL DOMICILIO COMPLETO
				//----- SI EL PAIS ES VALIDO
				if (strtoupper($enviados['country_code']) == $registro_elegido->country_code){
					//---- SI EL NOMBRE DE LA CALLE ES VALIDO
					if ( $levenshtein_nombre_calle == 1 or $levenshtein_nombre_calle == 0 ){
						//----- SI LA PROVINCIA ES VALIDA 
						if ( $levenshtein_provincia == 0 or $levenshtein_provincia == 1 ){
							//---- SI LA LOCALIDAD ES VALIDA
							if ( $levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES' )){
								//---- SI LA ALTURA ES VALIDA
								if (strtoupper($enviados['street_number']) == $registro_elegido->street_number){
									//---- SI TIENE PISO
									if ($registro_elegido->floor != NULL){
										//---- SI EL PISO ES VALIDO
										if (strtoupper($enviados['floor']) == $registro_elegido->floor){
											//---- SI TIENE DEPARTAMENTO
											if ($registro_elegido->appartment != NULL){
												//---- SI EL DEPARTAMENTO ES VALIDO O NO
												if (strtoupper($enviados['apartment']) == $registro_elegido->appartment){
													$address_complete_validation = 'TRUE';	
												} else {
													$address_complete_validation = 'PARTIALLY TRUE';	
												}
											} else {
												//---- SI NO TIENE DEPARTAMENTO
												$address_complete_validation = 'TRUE';	
											}
										} else {
											//--- SI EL PISO ES INVALIDO
											$address_complete_validation = 'PARTIALLY TRUE';
										}
									} else {
										//--- SI NO TIENE PISO
										$address_complete_validation = 'TRUE';
									}
								} else {
									//---- SI LA ALTURA ES INVALIDA
									$address_complete_validation = 'PARTIALLY TRUE';
								}
							} else {
								//------ SI LA LOCALIDAD ES INVALIDA
								$address_complete_validation = 'FALSE';
							}
						} else {
							//--- SI LA PROVINCIA ES INVALIDA
							$address_complete_validation = 'FALSE';		
						}
					} else {
						//--- SI LA CALLE NO ES INVALIDA
						$address_complete_validation = 'FALSE';	
					}
				} else {
					//--- SI EL PAIS ES INVALIDO
					$address_complete_validation = 'FALSE';
				}

								//-------------------------------------- FIN DE MODIFICACION 24/09/2021
				//---------MODIFICACION 02/12/2021
				//------- COMIENZO DE VALIDACION INDIVIDUAL DEL DOMICILIO
				//-- VALIDACION DE CODIGO PAIS


				$country_code_validation = 'FALSE';
				$street_name_validation = 'FALSE';
				$state_validation = 'FALSE';
				$city_validation = 'FALSE' ;
				$street_number_validation = 'FALSE';
				$floor_validation = 'FALSE';
				$apartment_validation = 'FALSE';

if ($enviados['country_code'] && $enviados['country_code'] !== '')
{
				$country_code_validation = (strtoupper($enviados['country_code']) == $registro_elegido->country_code) ? 'TRUE' : 'FALSE';
}
				//-- VALIDACION DEL NOMBRE DE CALLE
if ($enviados['street_name'] && $enviados['street_name'] !== '')
{
				$street_name_validation = ( $levenshtein_nombre_calle == 1) ? 'TRUE' : (($levenshtein_nombre_calle == 0) ? 'TRUE' : 'FALSE');
}

				//-- VALIDACION DEL NOMBRE DE PROVINCIA
if ($enviados['state'] && $enviados['state'] !== '')
{
				$state_validation = ($levenshtein_provincia == 0 or $levenshtein_provincia == 1) ? 'TRUE' : 'FALSE';
}
				//-- VALIDACION DE NOMBRE DE LOCALIDAD
if ($enviados['city'] && $enviados['city'] !== '')
{
				$city_validation = ($levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES')) ? 'TRUE' : 'FALSE' ;
}
				//-- VALIDACION DE ALTURA DE CALLE
if ($enviados['city'] && $enviados['city'] !== '')
{
				$street_number_validation = (strtoupper($enviados['street_number']) == $registro_elegido->street_number) ? 'TRUE' : 'FALSE';
}
if ($enviados['floor'] && $enviados['floor'] !== '')
{
				//-- VALIDACION DE PISO , SI EXISTE
				if ($registro_elegido->floor != NULL){
					$floor_validation = (strtoupper($enviados['floor']) == $registro_elegido->floor) ? 'TRUE' : 'FALSE';
				}
}
				//-- VALIDACION DE DEPARTAMENTO
if ($enviados['apartment'] && $enviados['apartment'] !== '')
{
				if ($registro_elegido->appartment != NULL){
					$apartment_validation = (strtoupper($enviados['apartment']) == $registro_elegido->appartment) ? 'TRUE' : 'FALSE';
				}
}
				//--------- FIN DE MODIFICACION


				$result[2] = new \StdClass();
				$result[2]->dni				= $dni_validation;
				$result[2]->tax_id			= $tax_id_validation;
				$result[2]->birthdate		= $birthdate_validation;
				$result[2]->name				= $name_validation;
				$result[2]->surname			= $surname_validation;
				$result[2]->address			= $address_validation;
				//$result[2]->stateV			= $pcia_validation;
				$result[2]->telephone		= $telephone_validation;
				$result[2]->gender			= $gender_validation;
				$result[2]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
				$result[2]->transaction_id 	= $resp->transaction_id;
				$result[2]->legal_address  	    = html_entity_decode($info->domicilio) ?? 'SIN DATOS'; //-> SE AGREGA PARA CONVERTIR CODIFICACION HTML QUE DEVUELVE AFIP
				$result[2]->state 			= $info->provicia ?? 'SIN DATOS';
				$result[2]->city 			= $info->localidad ?? 'SIN DATOS';
				$result[2]->zip 			= $info->codpos ?? 'SIN DATOS';
				//---- MODIFICACION 24/09/2021
				$result[2]->complete_address = $address_complete_validation;
				$result[2]->country_code     = $registro_elegido->country_code ?? 'SIN DATOS';
				$result[2]->street_name      = $registro_elegido->street_name ?? 'SIN DATOS';
				$result[2]->street_number    = $registro_elegido->street_number ?? 'SIN DATOS';
				$result[2]->floor            = $registro_elegido->floor ?? 'SIN DATOS';
				$result[2]->apartment        = $registro_elegido->appartment ?? 'SIN DATOS';
				//---- FIN DE MODIFICACION 
				//---- MODIFICACION 02/12/2021
				
				$result[2]->individual_address_validations = array(
					'country_code_validation' => $country_code_validation,
					'street_name_validation' => $street_name_validation,
					'state_validation' => $pcia_validation,
					'city_validation' => $city_validation,
					'street_number_validation' => $street_number_validation,
					'floor_validation' => $floor_validation ,
					'apartment_validation' => $apartment_validation

				);
				//--- FIN DE MODIFICACION
				SQLConnection::backendStoreProcedure('guardar_parametros_API_2',array($consulta->id,$resp->transaction_id),'selectOne');
			}
			
			if($name_validation == 'TRUE') {
				$integridad += 100;
			} else if ($name_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($surname_validation == 'TRUE') {
				$integridad += 100;
			} else if ($surname_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($address_validation == 'TRUE') {
				$integridad += 100;
			} else if ($address_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($pcia_validation == 'TRUE') {
				$integridad += 100;
			} else if ($pcia_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}


			//---- MODIFICACION 24/09/2021
			if ($address_complete_validation == 'TRUE') {
				$integridad += 100;
			} else if ($address_complete_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}
			//----

			$resultado_integridad = round(($integridad/6),2);

			// idReg
			/*
			try {
				$fresco = array('UPDATELOTE',$dni_validation,$tax_id_validation,$birthdate_validation,$name_validation,$surname_validation,$address_validation,
				$telephone_validation,$gender_validation,$result[2]->deceased ,$resp->transaction_id,$result[2]->legal_address ,$info->provicia,
				$info->localidad,$info->codpos,$address_complete_validation,$registro_elegido->country_code,$result[2]->street_name ,$result[2]->street_number,
				$result[2]->floor ,$result[2]->apartment,null,null,$idReg);	
			} catch (\Throwable $th) {
				$fresco = array('UPDATELOTE',$dni_validation,$tax_id_validation,$birthdate_validation,$name_validation,$surname_validation,$address_validation,
				$telephone_validation,$gender_validation,'null' ,$resp->transaction_id,'null' ,'null',
				'null','null',$address_complete_validation,'null','null' ,'null',
				'null' ,'null',null,null,$idReg);
			}
			SQLConnection::backendStoreProcedure('API_GET_BATCH_LOTE',$fresco,'selectOne');
			*/

			return json_encode([
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result, 'Integrity' => $resultado_integridad.' %'
			]);
		} else {
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'ERROR IN DATA (birthdate OR dni)','Response'=>[]
			]);
		}
	}




	public static function validacionGBG_v2_prueba(){
		$usuario    			= Session::get('usuario');
		$user_id    			= $usuario->user_id;
		$name     				= trim(Request::input('name'));
		$surname     			= trim(Request::input('surname'));
		$dni      				= trim(Request::input('dni'));
		$tax_id    				= trim(Request::input('tax_id'));
		$birthdate   			= trim(Request::input('birthdate'));
		$address   				= trim(Request::input('address'));
		$telephone   			= trim(Request::input('telephone'));
		$gender   				= trim(Request::input('gender'));
		//--- Modificacion 24/09/2021
		$street_name 			= trim(Request::input('street_name'));
		$street_number 			= trim(Request::input('street_number'));
		$floor 					= trim(Request::input('floor'));
		$apartment 				= trim(Request::input('apartment'));
		$city 					= trim(Request::input('city'));
		$state					= trim(Request::input('state'));
		$country_code			= trim(Request::input('country_code'));
		$idReg			= trim(Request::input('idReg'));

		//---
		$enviados['name'] 		= self::nombre_formateo($name);
		$enviados['surname'] 	= self::nombre_formateo($surname);
		$enviados['dni'] 		= self::normalizador_dni($dni);
		$enviados['tax_id'] 	= $tax_id;
		$tax_id = (isset($tax_id) && self::tax_id_valido($tax_id)) ? $tax_id : '';
		$enviados['birthdate'] 	= $birthdate;
		$enviados['address'] 	= mb_strtoupper($address);
		$enviados['telephone'] 	= $telephone;
		$enviados['gender'] 	= $gender;
		//------Modificacion 24/09/2021
		$enviados['street_name']= $street_name;
		$enviados['street_number']= $street_number;
		$enviados['floor']      = $floor;
		$enviados['apartment']  = $apartment;
		$enviados['city']       = $city;
		$enviados['state']       = $state;
		$enviados['country_code']= $country_code;
		//------
		$integridad = 0;
		$name_validation = 'FALSE';
		$surname_validation = 'FALSE';

		$p_url    = $_SERVER['REQUEST_URI'];
		$consulta = SQLConnection::backendStoreProcedure('guardar_parametros_API',array($user_id,$name,$surname,$dni,$tax_id,$birthdate,$address,$telephone,$gender,$p_url),'selectOne');

		if (self::fecha_valida($enviados['birthdate']) && self::dni_valido($enviados['dni'])) {
			
			if (empty($tax_id) && empty($dni)) {
				return json_encode(['Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID AND DNI CANNOT BE NULL','Response'=>[]]);
			}

			if (strlen($name) < 2 || strlen($surname) < 2) {
					return json_encode([
						'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME AND SURNAME IS 2','Response'=>[]
					]);
			}

			if (!empty($tax_id)) {
				$taxid_dni = $tax_id;
			} else {
				$taxid_dni = $dni;
			}
			$producto       = $usuario->producto ?? 71;
/* 06/12/2023 */
if ($producto == 109)
{
	$renaper = json_decode(self::soloRenaperGBG($dni,$gender));
	if (!$gender)
	{
		$renaper_datos = $renaper->Response; 
		$gender = $renaper_datos->gender; 
	}

	$datos_renaper = SQLConnection::backendStoreProcedure('RENAPER_BUSCAR',array($dni,$gender),'select');
	$datos = [];
	if ($datos_renaper)
	{
		$datos[0] = $datos_renaper[0];
	}
}
ELSE 
{
			if (!empty($tax_id) && strlen($tax_id) == 11) {
				//AFIPController::obtenerPadronForzado($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
				AFIPController::obtenerPadron($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
			} elseif (!empty($taxid_dni) && strlen($taxid_dni) == 8) { 
				$cuitss = self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				//echo(var_dump($cuitss)); die();
				$tax_id = $cuitss[0]->cuit ?? $tax_id ;
			} 

			//$datos = SQLConnection::backendStoreProcedure('validar_gbg',array($dni,$tax_id),'select');	
			$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id),'select');

			if (count($datos) == 0) {
				$cuitss = self::BuscarCuit_Forzado($dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$cuitss[0]->cuit),'select');
			}
			/* 26/07/2021 Si no devuelve nada, guardamos con lo que busco, sino Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
			if (sizeOf($datos) < 1) {
				$resp = self::consumir_servicio($taxid_dni,$producto);
			}
}

			$result = [];
			//----------------------------------------------------
			$address_validation = 'FALSE';
			$address_complete_validation = 'FALSE';
			$dni_validation = 'FALSE';
			$tax_id_validation = 'FALSE';
			$birthdate_validation = 'FALSE';
			$telephone_validation = 'FALSE';
			$gender_validation = 'FALSE';
			$pcia_validation = 'FALSE';
			//----------------------------------------------------


			foreach ($datos as $key => $persona) {
				
				
				/* 06/12/2023 */
				$info = new \StdClass();
				if ($producto == 109)
				{
					$persona->nombres 		= self::nombre_formateo($persona->nombres);
					$persona->apellidos 	= self::nombre_formateo($persona->apellido);
					$fecha_nacimiento = substr($persona->fechaNacimiento,6,4) . '-' . substr($persona->fechaNacimiento,3,2) . '-' . substr($persona->fechaNacimiento,0,2);
					$persona->fecha_nacimiento = $fecha_nacimiento;
					$persona->sexo = $persona->sexo;
					$persona->cuit = $persona->identificacion;
					$persona->dni = $persona->dni;
					$fecha_fallecimiento = substr($persona->fechaf,6,4) . '-' . substr($persona->fechaf,3,2) . '-' . substr($persona->fechaf,0,2);
					$persona->fecha_fallecimiento = $fecha_fallecimiento;
					
					$info->taxid = $persona->identificacion;
					$info->tipo = null;
					$info->nombre = $persona->apellidos ?? ''. ' ' . $persona->nombres ?? '';
					$calle = $persona->calle ?? '';
					$numero = $persona->numero ?? '';
					$piso = $persona->piso ?? '';
					$departamento = $persona->departamento ?? '';
					$domicilio = $calle . ' ' . $numero . ' ' . $piso . ' ' . $departamento;
					$domicilio = str_replace('    ',' ',$domicilio);
					$domicilio = str_replace('   ',' ',$domicilio);
					$info->domicilio = str_replace('  ',' ',$domicilio);
					$info->localidad = $persona->ciudad ?? $persona->municipio;
					$info->provicia = $persona->provincia;
					$info->codpos = $persona->cpostal;
					$info->telefonos = null;
					$info->actividades = null;
					$info->empleadores = null;
					$info->monotributo = null;
					$info->autonomo = null;
					$info->emails = null;
					$info->es_empleador = null;
					$info->facturas_apocrifas = null;

				}
				else 
				{	
					/* 05/12/2023 */
					$persona->nombres 		= self::nombre_formateo($persona->nombres);
					$persona->apellidos 	= self::nombre_formateo($persona->apellidos);
					$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');
				}

				/* 26/07/2021 Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
				$resp = self::consumir_servicio($persona->cuit,$producto);
				/**/

				$name_validation = self::validacionNombre($enviados, $persona);
				
				$surname_validation = self::validacionApellido($enviados, $persona);
				
				$localidad = '';
				$provincia = '';
				$pais = '';
				$address_validation = 'FALSE';
				
				$full_address = explode(',',$enviados['address']);
				
				if (sizeOf($full_address) > 0) {

					//$domicilio = $info->domicilio; //-> SE COMENTA Y AGREGA LA LINEA DE ABAJO PARA SOLUCIONAR PROBLEMA E RESPUESTA DE AFIP
					$domicilio = html_entity_decode($info->domicilio); //-> ESTO SE AGREGO PARA CONVERTIR CODIGO HTML QUE ENVIA AFIP EN LA RESPUESTA, GENRABA PROBLEMAS EN LA RESPUESTA JSON
					// Elimino blancos 
					$domicilio = trim($domicilio); 
					while (strpos($domicilio,'  ') !== false) {
						$domicilio = str_replace('  ',' ',$domicilio); 
					}
					
					$full_address[0] = trim($full_address[0]); 
					while (strpos($full_address[0] ,'  ') !== false) {
						$full_address[0] = str_replace('  ',' ',$full_address[0] ); 
					}

					// Comparo si el domicilio es exactamente igual
					if ($full_address[0] == $domicilio && $domicilio != '') { 
						$address_validation = 'TRUE';} 
					else {
						// Comparamos que no haya palabras o partes distintas 
						$address_contains = explode(' ',$full_address[0]);
						foreach ($address_contains as $address_value) {
							if ($address_value == '') { 
								continue; 
							}
							
							if (stripos($domicilio,$address_value) !== false && strlen($address_value) > 1) {
								if ($address_validation !== 'PARTIALLY TRUE') { 
									$address_validation = 'TRUE';
								}
								$domicilio = str_ireplace($address_value,'',$domicilio);
							} else {
								// Tiene algo distinto y era verdadero, pasa a ser parcialmente 
								if ($address_validation == 'TRUE') {
									$address_validation = 'PARTIALLY TRUE';
								}
							}
						}
						// Si termina de comparar y en domicilio todavia le queda algo, es porque el de la BD tiene mas cosas
						$domicilio = trim($domicilio); 
						if ($address_validation == 'TRUE' && $domicilio !== '') {
							$address_validation = 'PARTIALLY TRUE';
						}
					}
					
					$localidad 	= (isset($full_address[1])) ? strtoupper(trim($full_address[1])) : '';
					$provincia 	= (isset($full_address[2])) ? strtoupper(trim($full_address[2])) : '';
					$pais 		= (isset($full_address[3])) ? trim($full_address[3]) : 'ARGENTINA';
					
					if ($info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' || $info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES' || $info->provicia == 'CIUDAD BUENOS AIRES' ) {
						$info->provicia  = 'CIUDAD AUTONOMA DE BUENOS AIRES';
					}

					if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || $info->provicia == $provincia){
						$pcia_validation = 'TRUE';
					} 

					if ($address_validation == 'TRUE') {
						if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || ($info->provicia == $provincia && $info->localidad == $localidad ) && $pais = 'ARGENTINA' ){
							$address_validation = 'TRUE';
						} else {
							$address_validation = 'PARTIALLY TRUE';
						}
					}
				}

				//$birthdate_validation = 'FALSE'; //--> esto se lleva mas arriba.
				if($enviados['birthdate'] == $persona->fecha_nacimiento){
					$birthdate_validation = 'TRUE';
					$integridad += 100;
				}
				
				//$dni_validation = 'FALSE';  //--> esto se lleva mas arriba.
				if($enviados['dni'] == $persona->dni){
					$dni_validation = 'TRUE';
					$integridad += 100;
				}
				
				//$tax_id_validation = 'FALSE'; //--> esto se lleva mas arriba.
				if($enviados['tax_id'] == $persona->cuit){
					$tax_id_validation = 'TRUE';
				}
				
				//$telephone_validation = 'FALSE'; //--> esto se lleva mas arriba.
				$telephone_contains = explode(' /',$info->telefonos);
				foreach ($telephone_contains as $key2 => $value) {
					if ($value == $enviados['telephone'] && $enviados['telephone'] != '') {
						$telephone_validation = 'TRUE';
					} else if (stripos(trim($value),$enviados['telephone']) !== false || stripos('11'.trim($value),$enviados['telephone']) !== false) {
						$telephone_validation = 'PARTIALLY TRUE'; 
					} else {
						$telephone_validation = 'FALSE';
					}
				}
				//$gender_validation = 'FALSE';  //--> esto se lleva mas arriba.
				if (strtoupper($enviados['gender']) == strtoupper($persona->sexo)) {
					$gender_validation = 'TRUE';
				}
				
				//------------ MODIFICACION 24/09/2021
				$address_complete_validation = 'FALSE';
				//---- EL STORE QUE DEVUELVE EL LOS DATOS DEL DOMICILIO COMPLETO
				$datos_domicilios = SQLConnection::backendStoreProcedure('api_domicilios',array($persona->cuit));
				//-----
				$registro_elegido = [];
				//----- EL REGISTRO ELEGIDO ES DEL TIPO L
				foreach ($datos_domicilios as $key => $value) {
					if ($value->address_type == 'L') {
						$registro_elegido = $datos_domicilios[$key];
						break;
					}
				}
				//---------- SI NO HAY UN DOMICILIO TIPO L , AGARRA EL PRIMER REGISTRO
				if (empty($registro_elegido)) {
					$registro_elegido = (count($datos_domicilios) == 0 || is_null($datos_domicilios)) ? '' : $datos_domicilios[0];
				}
				//---- EN ESTE CONDICION CAMBIA EL NOMBRE SI ES CIUDAD AUTONOMA DE BUENOS AIRES, PARA PODER HACER LA COMPARACION CON EL REGISTRO OBTENIDO
				if (strtoupper($enviados['state']) == 'CABA' or strtoupper($enviados['state']) == 'CIUDAD AUTONOMA DE BUENOS AIRES' or strtoupper($enviados['state']) == 'CAPITAL FEDERAL') {
					$enviados['state'] = 'CIUDAD AUTONOMA BUENOS AIRES';
				}
				try {
					//---- DEFENIENDO LAS FUNCION LEVENSHTEIN
					$levenshtein_nombre_calle = levenshtein(strtoupper((strlen($enviados['street_name']) > 0) ? $enviados['street_name'] : 'null'),$registro_elegido->street_name);
					$levenshtein_provincia = levenshtein(strtoupper($enviados['state']),$registro_elegido->state);
					$levenshtein_localidad = levenshtein(strtoupper($enviados['city']),$registro_elegido->city);	
				} catch (\Throwable $th) {
					$levenshtein_nombre_calle = 2;
					$levenshtein_provincia = 2;
					$levenshtein_localidad = 2;
					$objTemporal = new \StdClass();
					$objTemporal->country_code = 'FALSE';
					$objTemporal->street_number = 'FALSE';
					$objTemporal->floor = 'FALSE';
					$objTemporal->appartment = 'FALSE';
					$registro_elegido = $objTemporal;
				}
				//---- COMIENZO DE LA VALIDACION DEL DOMICILIO COMPLETO
				//----- SI EL PAIS ES VALIDO
				if (strtoupper($enviados['country_code']) == $registro_elegido->country_code){
					//---- SI EL NOMBRE DE LA CALLE ES VALIDO
					if ( $levenshtein_nombre_calle == 1 or $levenshtein_nombre_calle == 0 ){
						//----- SI LA PROVINCIA ES VALIDA 
						if ( $levenshtein_provincia == 0 or $levenshtein_provincia == 1 ){
							//---- SI LA LOCALIDAD ES VALIDA
							if ( $levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES' )){
								//---- SI LA ALTURA ES VALIDA
								if (strtoupper($enviados['street_number']) == $registro_elegido->street_number){
									//---- SI TIENE PISO
									if ($registro_elegido->floor != NULL){
										//---- SI EL PISO ES VALIDO
										if (strtoupper($enviados['floor']) == $registro_elegido->floor){
											//---- SI TIENE DEPARTAMENTO
											if ($registro_elegido->appartment != NULL){
												//---- SI EL DEPARTAMENTO ES VALIDO O NO
												if (strtoupper($enviados['apartment']) == $registro_elegido->appartment){
													$address_complete_validation = 'TRUE';	
												} else {
													$address_complete_validation = 'PARTIALLY TRUE';	
												}
											} else {
												//---- SI NO TIENE DEPARTAMENTO
												$address_complete_validation = 'TRUE';	
											}
										} else {
											//--- SI EL PISO ES INVALIDO
											$address_complete_validation = 'PARTIALLY TRUE';
										}
									} else {
										//--- SI NO TIENE PISO
										$address_complete_validation = 'TRUE';
									}
								} else {
									//---- SI LA ALTURA ES INVALIDA
									$address_complete_validation = 'PARTIALLY TRUE';
								}
							} else {
								//------ SI LA LOCALIDAD ES INVALIDA
								$address_complete_validation = 'FALSE';
							}
						} else {
							//--- SI LA PROVINCIA ES INVALIDA
							$address_complete_validation = 'FALSE';		
						}
					} else {
						//--- SI LA CALLE NO ES INVALIDA
						$address_complete_validation = 'FALSE';	
					}
				} else {
					//--- SI EL PAIS ES INVALIDO
					$address_complete_validation = 'FALSE';
				}

				//-------------------------------------- FIN DE MODIFICACION 24/09/2021
				//---------MODIFICACION 02/12/2021
				//------- COMIENZO DE VALIDACION INDIVIDUAL DEL DOMICILIO
				//-- VALIDACION DE CODIGO PAIS
				$country_code_validation = (strtoupper($enviados['country_code']) == $registro_elegido->country_code) ? 'TRUE' : 'FALSE';
				//-- VALIDACION DEL NOMBRE DE CALLE
				$street_name_validation = ( $levenshtein_nombre_calle == 1) ? 'TRUE' : (($levenshtein_nombre_calle == 0) ? 'TRUE' : 'FALSE');
				//-- VALIDACION DEL NOMBRE DE PROVINCIA
				$state_validation = ($levenshtein_provincia == 0 or $levenshtein_provincia == 1) ? 'TRUE' : 'FALSE';
				//-- VALIDACION DE NOMBRE DE LOCALIDAD
				$city_validation = ($levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES')) ? 'TRUE' : 'FALSE' ;
				//-- VALIDACION DE ALTURA DE CALLE
				$street_number_validation = (strtoupper($enviados['street_number']) == $registro_elegido->street_number) ? 'TRUE' : 'FALSE';
				//-- VALIDACION DE PISO , SI EXISTE
				if ($registro_elegido->floor != NULL){
					$floor_validation = (strtoupper($enviados['floor']) == $registro_elegido->floor) ? 'TRUE' : 'FALSE';
				}
				//-- VALIDACION DE DEPARTAMENTO
				if ($registro_elegido->appartment != NULL){
					$apartment_validation = (strtoupper($enviados['apartment']) == $registro_elegido->appartment) ? 'TRUE' : 'FALSE';
				}
				//--------- FIN DE MODIFICACION

				$result[2] = new \StdClass();
				$result[2]->dni				= $dni_validation;
				$result[2]->tax_id			= $tax_id_validation;
				$result[2]->birthdate		= $birthdate_validation;
				$result[2]->name				= $name_validation;
				$result[2]->surname			= $surname_validation;
				$result[2]->address			= $address_validation;
				//$result[2]->stateV			= $pcia_validation;
				$result[2]->telephone		= $telephone_validation;
				$result[2]->gender			= $gender_validation;
				$result[2]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
				$result[2]->transaction_id 	= $resp->transaction_id;
				$result[2]->legal_address  	    = html_entity_decode($info->domicilio); //-> SE AGREGA PARA CONVERTIR CODIFICACION HTML QUE DEVUELVE AFIP
				$result[2]->state 			= $info->provicia;
				$result[2]->city 			= $info->localidad;
				$result[2]->zip 			= $info->codpos;
				//---- MODIFICACION 24/09/2021
				$result[2]->complete_address = $address_complete_validation;
				$result[2]->country_code     = $registro_elegido->country_code;
				$result[2]->street_name      = $registro_elegido->street_name ?? 'SIN DATOS';
				$result[2]->street_number    = $registro_elegido->street_number ?? 'SIN DATOS';
				$result[2]->floor            = $registro_elegido->floor ?? 'SIN DATOS';
				$result[2]->apartment        = $registro_elegido->appartment ?? 'SIN DATOS';
				//---- FIN DE MODIFICACION 
				//---- MODIFICACION 02/12/2021
				
				$result[2]->individual_address_validations = array(
					'country_code_validation' => $country_code_validation,
					'street_name_validation' => $street_name_validation,
					'state_validation' => $pcia_validation,
					'city_validation' => $city_validation,
					'street_number_validation' => $street_number_validation,
					'floor_validation' => isset($floor_validation) ?  $floor_validation : 'SIN DATOS',
					'apartment_validation' => isset($apartment_validation) ? $apartment_validation : 'SIN DATOS'

				);
				//--- FIN DE MODIFICACION
				SQLConnection::backendStoreProcedure('guardar_parametros_API_2',array($consulta->id,$resp->transaction_id),'selectOne');
			}
			
			if($name_validation == 'TRUE') {
				$integridad += 100;
			} else if ($name_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($surname_validation == 'TRUE') {
				$integridad += 100;
			} else if ($surname_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($address_validation == 'TRUE') {
				$integridad += 100;
			} else if ($address_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if ($pcia_validation == 'TRUE') {
				$integridad += 100;
			} else if ($pcia_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}


			//---- MODIFICACION 24/09/2021
			if ($address_complete_validation == 'TRUE') {
				$integridad += 100;
			} else if ($address_complete_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}
			//----

			$resultado_integridad = round(($integridad/6),2);

			// idReg
			/*
			try {
				$fresco = array('UPDATELOTE',$dni_validation,$tax_id_validation,$birthdate_validation,$name_validation,$surname_validation,$address_validation,
				$telephone_validation,$gender_validation,$result[2]->deceased ,$resp->transaction_id,$result[2]->legal_address ,$info->provicia,
				$info->localidad,$info->codpos,$address_complete_validation,$registro_elegido->country_code,$result[2]->street_name ,$result[2]->street_number,
				$result[2]->floor ,$result[2]->apartment,null,null,$idReg);	
			} catch (\Throwable $th) {
				$fresco = array('UPDATELOTE',$dni_validation,$tax_id_validation,$birthdate_validation,$name_validation,$surname_validation,$address_validation,
				$telephone_validation,$gender_validation,'null' ,$resp->transaction_id,'null' ,'null',
				'null','null',$address_complete_validation,'null','null' ,'null',
				'null' ,'null',null,null,$idReg);
			}
			SQLConnection::backendStoreProcedure('API_GET_BATCH_LOTE',$fresco,'selectOne');
			*/

			return json_encode([
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result, 'Integrity' => $resultado_integridad.' %'
			]);
		} else {
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'ERROR IN DATA (birthdate OR dni)','Response'=>[]
			]);
		}
	}


	/*
	valida datos personales.
	devuelve @json (Parameters,Status,Message,Response)
	*/
	public static function validacionGBG_v2GBGClaudio(){
		$name_validation = 'FALSE';
		$surname_validation = 'FALSE';

		$usuario    			= Session::get('usuario');
		$user_id    			= $usuario->user_id;
		$name     				= trim(Request::input('name'));
		$surname     			= trim(Request::input('surname'));
		$dni      				= trim(Request::input('dni'));
		$tax_id    				= trim(Request::input('tax_id'));
		$birthdate   			= trim(Request::input('birthdate'));
		$address   				= trim(Request::input('address'));
		$telephone   			= trim(Request::input('telephone'));
		$gender   				= trim(Request::input('gender'));
		//--- Modificacion 24/09/2021
		$street_name 			= trim(Request::input('street_name'));
		$street_number 			= trim(Request::input('street_number'));
		$floor 					= trim(Request::input('floor'));
		$apartment 				= trim(Request::input('apartment'));
		$city 					= trim(Request::input('city'));
		$state					= trim(Request::input('state'));
		$country_code			= trim(Request::input('country_code'));
		//---
		$enviados['name'] 		= self::nombre_formateo($name);
		$enviados['surname'] 	= self::nombre_formateo($surname);
		$enviados['dni'] 		= self::normalizador_dni($dni);
		$enviados['tax_id'] 	= $tax_id;
		$tax_id = (isset($tax_id) && self::tax_id_valido($tax_id)) ? $tax_id : '';
		$enviados['birthdate'] 	= $birthdate;
		$enviados['address'] 	= mb_strtoupper($address);
		$enviados['telephone'] 	= $telephone;
		$enviados['gender'] 	= $gender;
		//------Modificacion 24/09/2021
		$enviados['street_name']= $street_name;
		$enviados['street_number']= $street_number;
		$enviados['floor']      = $floor;
		$enviados['apartment']  = $apartment;
		$enviados['city']       = $city;
		$enviados['state']       = $state;
		$enviados['country_code']= $country_code;
		//------
		$integridad = 0;


		$p_url    = $_SERVER['REQUEST_URI'];
		$consulta = SQLConnection::backendStoreProcedure('guardar_parametros_API',array($user_id,$name,
																						$surname,
																						$dni,
																						$tax_id,
																						$birthdate,
																						$address,
																						$telephone,
																						$gender,
																						$p_url),'selectOne');

		if(self::fecha_valida($enviados['birthdate']) && self::dni_valido($enviados['dni'])) {

			if(empty($tax_id) && empty($dni)){
				return json_encode([
					'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID AND DNI CANNOT BE NULL','Response'=>[]
				]);
			}
			/*if(!empty($tax_id)){
				if( ($tax_id != '20504347169' ) && ($tax_id != '20335754655') && ($tax_id != '23140564699') && $tax_id != '20259106657'){
					return json_encode([
						'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID NOT ALLOWED','Response'=>[]
					]);
				}
					
			}
			if(!empty($dni)){
				if( $dni != '50434716' &&   $dni != '33575465'  && $dni != '14056469' && $dni != '25910665'){
					return json_encode([
						'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'DNI NOT ALLOWED','Response'=>[]
					]);
				}
			}*/
			if(strlen($name) < 2 || strlen($surname) < 2){
					return json_encode([
						'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME AND SURNAME IS 2','Response'=>[]
					]);
			}
			if(!empty($tax_id)) {
				$taxid_dni = $tax_id;
			}
			else
			{
				$taxid_dni = $dni;
			}
			//var_dump($taxid_dni); die(); 
			$producto       = $usuario->producto ?? 71;
			//$p_ip = $_SERVER['REMOTE_ADDR'];
			//$resp = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$taxid_dni,producto,$p_ip),'selectOne');
			

			/*if($nombre == '' || $fecha_nacimiento == '' || ($dni == '' && $tax_id == '')){
				return json_encode([
					'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'All fields are required','Response'=>[]
				]);
			}*/
			
			if(!empty($tax_id) && strlen($tax_id) == 11){
				//AFIPController::obtenerPadron($tax_id,true,'AR',false); //-> SE COMENTA PORQUE GENERA UN ERROR (REVISAR)
			}
			/* 01/10/2020 */
			elseif (!empty($taxid_dni) && strlen($taxid_dni) == 8) 
			{ 
				$cuitss = self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				$tax_id = $cuitss[0]->cuit ?? $tax_id ;
			} 

			//$datos = SQLConnection::backendStoreProcedure('validar_gbg',array($dni,$tax_id),'select');	
			$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id),'select');

			if(count($datos) == 0) {
				$cuitss = self::BuscarCuit($dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
				$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$cuitss[0]->cuit),'select');
			}
			/* 26/07/2021 Si no devuelve nada, guardamos con lo que busco, 
						sino Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
			if (sizeOf($datos) < 1)
			{
			$resp = self::consumir_servicio($taxid_dni,$producto);
			}
			$result = [];
			
			foreach($datos as $key => $persona){		
				/* 26/07/2021 Lo hacemos dentro del foreach, para guardar la consulta por el cuit */
				$resp = self::consumir_servicio($persona->cuit,$producto);
				/**/
				$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');
				
				$name_validation = self::validacionNombre($enviados, $persona);
				/* 22/04/2021 lo cambiamos por la funcion validacionNombre
				$name_validation = 'FALSE';
				$nombre_contains = explode(' ',$enviados['name']);
				foreach($nombre_contains as $name){
					foreach(explode(' ',$persona->nombres) as $nombre_enviado){
						if(strtoupper($nombre_enviado) == strtoupper($name)){
							$name_validation = 'PARTIALLY TRUE';
							$persona->nombres = str_ireplace($name,'',$persona->nombres);
						}
					}
				}
				if(trim($persona->nombres) == ''){
					$name_validation = 'TRUE';
				}
				if($name_validation != 'TRUE'){
					foreach($nombre_contains as $name){
						foreach(explode(' ',$persona->nombres) as $nombre_enviado){
							$damerau = self::DamerauLevenshtein(strtoupper($nombre_enviado),strtoupper($name));

							if($damerau == 1 || $damerau == 0){
								$name_validation = 'PARTIALLY TRUE';
								$persona->nombres = str_ireplace($name,'',$persona->nombres);
							}
						}
					}
				}
				if(trim($persona->nombres) == ''){
					$name_validation = 'TRUE';
				}
				*/
				$surname_validation = self::validacionApellido($enviados, $persona);
				/* 22/04/2021 lo cambiamos por la funcion validacionApellido
				$surname_validation = 'FALSE';
				$surname_contains = explode(' ',$enviados['surname']);
				foreach($surname_contains as $surname){
					foreach(explode(' ',$persona->apellidos) as $apellido_enviado){
						if(strtoupper($apellido_enviado) == strtoupper($surname)){
							$surname_validation = 'PARTIALLY TRUE';
							$persona->apellidos = str_ireplace($surname,'',$persona->apellidos);
						}
					}
				}
				if(trim($persona->apellidos) == ''){
					$surname_validation = 'TRUE';
				}
				if($surname_validation != 'TRUE'){
					foreach($surname_contains as $name){
						foreach(explode(' ',$persona->apellidos) as $apellido_enviado){
							$damerau = self::DamerauLevenshtein(strtoupper($apellido_enviado),strtoupper($surname));
							if($damerau == 1 || $damerau == 0){
								$surname_validation = 'PARTIALLY TRUE';
								$persona->apellidos = str_ireplace($surname,'',$persona->apellidos);
							}
						}
					}
				}
				if(trim($persona->apellidos) == ''){
					$surname_validation = 'TRUE';
				}
				*/
				$localidad = '';
				$provincia = '';
				$pais = '';
				$address_validation = 'FALSE';
				
				$full_address = explode(',',$enviados['address']);
				///////////////////////
				/* hasta 05/08/2021
					if(sizeOf($full_address) > 1){
					$address_contains = explode(' ',$full_address[0]);
					foreach($address_contains as $address_value){
						if(stripos($info->domicilio,$address_value) !== false){
							$address_validation = 'TRUE';
							$info->domicilio = str_ireplace($address_value,'',$info->domicilio);
						}else{
							$address_validation = 'FALSE';
							break;
						}
					}
					$localidad 	= $full_address[1];
					$provincia 	= $full_address[2];
					$pais 		= $full_address[3];
					if($info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES'){
						$info->provicia = 'CIUDAD AUTONOMA DE BUENOS AIRES';
					}
					if($address_validation != 'FALSE'){
						if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || ($info->provicia == $provincia && $info->localidad == $localidad ) && $pais = 'ARGENTINA' ){
							$address_validation = 'TRUE';
						}else{
							$address_validation = 'PARTIALLY TRUE';
						}
					}
				}
				*/ 
				///////////////////////
				if(sizeOf($full_address) > 0){

					//$domicilio = $info->domicilio; //-> SE COMENTA Y AGREGA LA LINEA DE ABAJO PARA SOLUCIONAR PROBLEMA E RESPUESTA DE AFIP
					$domicilio = html_entity_decode($info->domicilio); //-> ESTO SE AGREGO PARA CONVERTIR CODIGO HTML QUE ENVIA AFIP EN LA RESPUESTA, GENRABA PROBLEMAS EN LA RESPUESTA JSON
					// Elimino blancos 
					$domicilio = trim($domicilio); 
					while(strpos($domicilio,'  ') !== false){
						$domicilio = str_replace('  ',' ',$domicilio); 
					}
					
					$full_address[0] = trim($full_address[0]); 
					while(strpos($full_address[0] ,'  ') !== false){
						$full_address[0] = str_replace('  ',' ',$full_address[0] ); 
					}

					// Comparo si el domicilio es exactamente igual
					if ($full_address[0] == $domicilio) 
					{ $address_validation = 'TRUE';} 
					else 
					{
					// Comparamos que no haya palabras o partes distintas 
						$address_contains = explode(' ',$full_address[0]);
						foreach($address_contains as $address_value){
							if ($address_value == '') { continue; }
							if(stripos($domicilio,$address_value) !== false && strlen($address_value) > 1){
								if ($address_validation !== 'PARTIALLY TRUE') { 
									$address_validation = 'TRUE';
								}
								$domicilio = str_ireplace($address_value,'',$domicilio);
							}else{
								// Tiene algo distinto y era verdadero, pasa a ser parcialmente 
								if ($address_validation == 'TRUE') 
								{
									$address_validation = 'PARTIALLY TRUE';
								}
							}
						}
						// Si termina de comparar y en domicilio todavia le queda algo, es porque el de la BD tiene mas cosas
						$domicilio = trim($domicilio); 
						if ($address_validation == 'TRUE' && $domicilio !== '') 
						{
							$address_validation = 'PARTIALLY TRUE';
						}
					}
					
					$localidad 	= (isset($full_address[1])) ? strtoupper(trim($full_address[1])) : '';
					$provincia 	= (isset($full_address[2])) ? strtoupper(trim($full_address[2])) : '';
					$pais 		= (isset($full_address[3])) ? trim($full_address[3]) : 'ARGENTINA';
					
					if($info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' || $info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES' || $info->provicia == 'CIUDAD BUENOS AIRES' ){
						$info->provicia  = 'CIUDAD AUTONOMA DE BUENOS AIRES';
					}

					if($address_validation == 'TRUE'){
						if( ($provincia == 'CIUDAD AUTONOMA DE BUENOS AIRES' && $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES' ) || ($info->provicia == $provincia && $info->localidad == $localidad ) && $pais = 'ARGENTINA' ){
							$address_validation = 'TRUE';
						}else{
							$address_validation = 'PARTIALLY TRUE';
						}
					}
				}
				$birthdate_validation = 'FALSE';
				if($enviados['birthdate'] == $persona->fecha_nacimiento){
					$birthdate_validation = 'TRUE';
					$integridad += 100;
				}
				
				$dni_validation = 'FALSE';
				if($enviados['dni'] == $persona->dni){
					$dni_validation = 'TRUE';
					$integridad += 100;
				}
				
				$tax_id_validation = 'FALSE';
				if($enviados['tax_id'] == $persona->cuit){
					$tax_id_validation = 'TRUE';
				}
				
				$telephone_validation = 'FALSE';
				$telephone_contains = explode(' /',$info->telefonos);
				foreach ($telephone_contains as $key2 => $value) {
					if($value == $enviados['telephone']){
						$telephone_validation = 'TRUE';
					}else if(stripos(trim($value),$enviados['telephone']) !== false || stripos('11'.trim($value),$enviados['telephone']) !== false){
						$telephone_validation = 'PARTIALLY TRUE'; 
					}else{
						$telephone_validation = 'FALSE';
					}
				}
			
				$gender_validation = 'FALSE';
				if(strtoupper($enviados['gender']) == strtoupper($persona->sexo)){
					$gender_validation = 'TRUE';
				}
				
				//------------ MODIFICACION 24/09/2021
				$address_complete_validation = 'FALSE';
				//---- EL STORE QUE DEVUELVE EL LOS DATOS DEL DOMICILIO COMPLETO
				$datos_domicilios = SQLConnection::backendStoreProcedure('api_domicilios',array($persona->cuit));
				//-----
				$registro_elegido = [];
				//----- EL REGISTRO ELEGIDO ES DEL TIPO L
				foreach ($datos_domicilios as $key => $value) {
					if ($value->address_type == 'L'){
						$registro_elegido = $datos_domicilios[$key];
						break;
					}
				}
				//---------- SI NO HAY UN DOMICILIO TIPO L , AGARRA EL PRIMER REGISTRO
				if (empty($registro_elegido)){
					$registro_elegido = $datos_domicilios[0];
				}
				//---- EN ESTE CONDICION CAMBIA EL NOMBRE SI ES CIUDAD AUTONOMA DE BUENOS AIRES, PARA PODER HACER LA COMPARACION CON EL REGISTRO OBTENIDO
				if (strtoupper($enviados['state']) == 'CABA' or strtoupper($enviados['state']) == 'CIUDAD AUTONOMA DE BUENOS AIRES' or strtoupper($enviados['state']) == 'CAPITAL FEDERAL'){
					$enviados['state'] = 'CIUDAD AUTONOMA BUENOS AIRES';
				}
				//---- DEFENIENDO LAS FUNCION LEVENSHTEIN
				$levenshtein_nombre_calle = levenshtein(strtoupper($enviados['street_name']),$registro_elegido->street_name);
				$levenshtein_provincia = levenshtein(strtoupper($enviados['state']),$registro_elegido->state);
				$levenshtein_localidad = levenshtein(strtoupper($enviados['city']),$registro_elegido->city);
				//---- COMIENZO DE LA VALIDACION DEL DOMICILIO COMPLETO
				//----- SI EL PAIS ES VALIDO
				if (strtoupper($enviados['country_code']) == $registro_elegido->country_code){
					//---- SI EL NOMBRE DE LA CALLE ES VALIDO
					if ( $levenshtein_nombre_calle == 1 or $levenshtein_nombre_calle == 0 ){
						//----- SI LA PROVINCIA ES VALIDA 
						if ( $levenshtein_provincia == 0 or $levenshtein_provincia == 1 ){
							//---- SI LA LOCALIDAD ES VALIDA
							if ( $levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES' )){
								//---- SI LA ALTURA ES VALIDA
								if (strtoupper($enviados['street_number']) == $registro_elegido->street_number){
									//---- SI TIENE PISO
									if ($registro_elegido->floor != NULL){
										//---- SI EL PISO ES VALIDO
										if (strtoupper($enviados['floor']) == $registro_elegido->floor){
											//---- SI TIENE DEPARTAMENTO
											if ($registro_elegido->appartment != NULL){
												//---- SI EL DEPARTAMENTO ES VALIDO
												if (strtoupper($enviados['apartment']) == $registro_elegido->appartment){
													$address_complete_validation = 'TRUE';	
												}
												//---- SI EL DEPARTAMENTO ES INVALIDO
												else{
													$address_complete_validation = 'PARTIALLY TRUE';	
												}
												//----
											} 
											//---- SI NO TIENE DEPARTAMENTO
											else{
												$address_complete_validation = 'TRUE';	
											}
										}
										//--- SI EL PISO ES INVALIDO
										else{
											$address_complete_validation = 'PARTIALLY TRUE';
										}
									}
									//--- SI NO TIENE PISO
									else{
										$address_complete_validation = 'TRUE';
									}
								}
								//---- SI LA ALTURA ES INVALIDA
								else{
									$address_complete_validation = 'PARTIALLY TRUE';
								}
							}
							//------ SI LA LOCALIDAD ES INVALIDA
							else{
								$address_complete_validation = 'FALSE';
							}
							//------
						}
						//--- SI LA PROVINCIA ES INVALIDA
						else{
							$address_complete_validation = 'FALSE';		
						}
						//----
					}
					//--- SI LA CALLE NO ES INVALIDA
					else{
						$address_complete_validation = 'FALSE';	
					}
					//---
				}
				//--- SI EL PAIS ES INVALIDO
				else{
					$address_complete_validation = 'FALSE';
				}
				//-------------------------------------- FIN DE MODIFICACION 24/09/2021
				//---------MODIFICACION 02/12/2021
				//------- COMIENZO DE VALIDACION INDIVIDUAL DEL DOMICILIO
				//-- VALIDACION DE CODIGO PAIS
				$country_code_validation = (strtoupper($enviados['country_code']) == $registro_elegido->country_code) ? 'TRUE' : 'FALSE';
				//-- VALIDACION DEL NOMBRE DE CALLE
				$street_name_validation = ( $levenshtein_nombre_calle == 1 or $levenshtein_nombre_calle == 0 ) ? 'TRUE' : 'FALSE';
				//-- VALIDACION DEL NOMBRE DE PROVINCIA
				$state_validation = ($levenshtein_provincia == 0 or $levenshtein_provincia == 1) ? 'TRUE' : 'FALSE';
				//-- VALIDACION DE NOMBRE DE LOCALIDAD
				$city_validation = ($levenshtein_localidad == 0 or $levenshtein_localidad == 1 or (strtoupper($enviados['state']) == 'CIUDAD AUTONOMA BUENOS AIRES')) ? 'TRUE' : 'FALSE' ;
				//-- VALIDACION DE ALTURA DE CALLE
				$street_number_validation = (strtoupper($enviados['street_number']) == $registro_elegido->street_number) ? 'TRUE' : 'FALSE';
				//-- VALIDACION DE PISO , SI EXISTE
				if ($registro_elegido->floor != NULL){
					$floor_validation = (strtoupper($enviados['floor']) == $registro_elegido->floor) ? 'TRUE' : 'FALSE';
				}
				//-- VALIDACION DE DEPARTAMENTO
				if ($registro_elegido->appartment != NULL){
					$apartment_validation = (strtoupper($enviados['apartment']) == $registro_elegido->appartment) ? 'TRUE' : 'FALSE';
				}
				//--------- FIN DE MODIFICACION

				$result[2] = new \StdClass();
				$result[2]->dni				= $dni_validation;
				$result[2]->tax_id			= $tax_id_validation;
				$result[2]->birthdate		= $birthdate_validation;
				$result[2]->name				= $name_validation;
				$result[2]->surname			= $surname_validation;
				$result[2]->address			= $address_validation;
				$result[2]->telephone		= $telephone_validation;
				$result[2]->gender			= $gender_validation;
				$result[2]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
				$result[2]->transaction_id 	= $resp->transaction_id;
				$result[2]->legal_address  	    = html_entity_decode($info->domicilio); //-> SE AGREGA PARA CONVERTIR CODIFICACION HTML QUE DEVUELVE AFIP
				$result[2]->state 			= $info->provicia;
				$result[2]->city 			= $info->localidad;
				$result[2]->zip 			= $info->codpos;
				//---- MODIFICACION 24/09/2021
				$result[2]->complete_address = $address_complete_validation;
				$result[2]->country_code     = $registro_elegido->country_code;
				$result[2]->street_name      = $registro_elegido->street_name ?? 'SIN DATOS';
				$result[2]->street_number    = $registro_elegido->street_number ?? 'SIN DATOS';
				$result[2]->floor            = $registro_elegido->floor ?? 'SIN DATOS';
				$result[2]->apartment        = $registro_elegido->appartment ?? 'SIN DATOS';
				//---- FIN DE MODIFICACION 
				//---- MODIFICACION 02/12/2021
				$result[2]->individual_address_validations = array(
					'country_code_validation' => $country_code_validation,
					'street_name_validation' => $street_name_validation,
					'state_validation' => $state_validation,
					'city_validation' => $city_validation,
					'street_number_validation' => $street_number_validation,
					'floor_validation' => isset($floor_validation) ?  $floor_validation : 'SIN DATOS',
					'apartment_validation' => isset($apartment_validation) ? $apartment_validation : 'SIN DATOS'

				);
				//--- FIN DE MODIFICACION
				SQLConnection::backendStoreProcedure('guardar_parametros_API_2',array($consulta->id,$resp->transaction_id),'selectOne');
			}
			
			if($name_validation == 'TRUE') {
				$integridad += 100;
			} else if($name_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if($surname_validation == 'TRUE') {
				$integridad += 100;
			} else if($surname_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			if($address_validation == 'TRUE') {
				$integridad += 100;
			} else if($address_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}

			//---- MODIFICACION 24/09/2021
			if($address_complete_validation == 'TRUE') {
				$integridad += 100;
			} else if($address_complete_validation == 'PARTIALLY TRUE') {
				$integridad += 48;
			}
			//----

			$resultado_integridad = round(($integridad/6),2);
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result, 'Integrity' => $resultado_integridad.' %'
			]);
		} else {
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'ERROR IN DATA (birthdate OR dni)','Response'=>[]
			]);
		}
	}
	
 	public static function encriptarUsuario(){
		$usuario    	= Session::get('usuario');
		$user_id    	= $usuario->user_id;
		$username      = Request::input('username');
		if(empty($username)){
			return json_encode([
				'Status'=>'ERROR','Message'=>'USUARIO INVÁLIDO/VACÍO','Response'=>[]
			]);
		}
		$array['username'] = $username;
		$array['date'] = date('Y-m-d h:i:s');
		//$exec = Misc::encrypt($array);  // asi estaba en www2
		$exec = Misc::encrypt(json_encode($array)); // asi en www
		return json_encode([
			'Status'=>'OK','Message'=>'OK','Response'=>$exec
		]);
	}

 	public static function obtenerControlacceso(){
		//3915936
		$usuario    	= Session::get('usuario');
		$user_id    	= $usuario->user_id;
		$client_id      = Request::input('client_id');

		$producto       = $usuario->producto ?? 68;
		self::consumir_servicio($client_id,$producto);
		//SQLConnection::consumirServicio($user_id,$client_id,68);

		if(empty($client_id)){
			return json_encode([
				'Status'=>'ERROR','Message'=>'CLIENTE INVÁLIDO','Response'=>[]
			]);
		}
		$exec = SQLConnection::backendStoreProcedure('Imperium_Digicard_Response',array($client_id));
		return json_encode([
		'Status'=>'OK','Message'=>'OK','Response'=>$exec
		]);
	}

	public static function cuitEnrichment(){
		$cuit       	= Request::input('cuit');
		$meses       	= Request::input('meses') ? Request::input('meses') : 12;
		$usuario    	= Session::get('usuario');
		$user_id    	= $usuario->user_id;
		$cliente     	= $usuario->cliente['client_id'];

		$producto = $usuario->producto ?? 65;
		self::consumir_servicio($cuit,$producto);
		//SQLConnection::consumirServicio($user_id,$cuit,65);

	 //obtenerAFIP.
		if(!empty($cuit) && strlen($cuit) == 11){
			AFIPController::obtenerPadron($cuit,true,'AR',false);
		}else{
			return json_encode([
			'Status'=>'ERROR','Message'=>'CUIT INVÁLIDO','Response'=>[]
			]);
		}

		$exec = SQLConnection::backendStoreProcedure('sp_procesos_cuit_enrichment_api',array($cliente,$cuit,$meses),'selectOne');
		return json_encode([
			'Status'=>'OK','Message'=>'OK','Response'=>$exec
		]);
	}

	//servicio para validar con gente que parsea EDICTOS.
	public static function obtenerInfoCuitDni(){
		$cuit  = Request::input('identificacion');
		$nombre = trim(Request::input('nombre'));
		$nombre_contains= '';
		if($nombre){
			$nombre_contains= Misc::parsearBusquedaPadron($nombre);
		}
		$usuario        = Session::get('usuario');
		$user_id        = $usuario->user_id;
		$provincia = Request::input('provincia') ?? null;
		$maxregistros = Request::input('maxqty') ?? 20;
		$respuesta = new stdClass();

		$producto = $usuario->producto ?? 40;
		self::consumir_servicio($cuit,$producto);
		//SQLConnection::consumirServicio($user_id,$cuit,40);

		/* 22/07/2021 Agregamos que pase por afip */
		if(!empty($cuit) && strlen($cuit) == 11){
			AFIPController::obtenerPadron($cuit,true,'AR',false);
		}

		$validacion = SQLConnection::backendStoreProcedure('api_edictos_dni_cuit',array($cuit,$nombre,$nombre_contains,$maxregistros,$provincia),false);


		if(!empty($validacion)){
			foreach ($validacion as $key => $value) {

				$respuesta->identificacion_buscada=$cuit;
				$respuesta->nombre_buscado=$nombre;
				$respuesta->fecha = date("Y-m-d h:i:s");

				if ($value->error > 0)
				{
					$respuesta->codigo_error =$value->error;
					$respuesta->mensaje_error=$value->mensaje_error;
					$respuesta->fidelitas_response = [];
					$usuario        = Session::get('usuario');
					$user_id        = $usuario->user_id;
					return json_encode($respuesta);
				}

				if ($key==0)
				{
					$respuesta->codigo_error = $value->error;
					$respuesta->mensaje_error= $value->mensaje_error;
					$respuesta->fidelitas_response = [];
				}
				
				$respuesta->fidelitas_response[$key]['mensaje']=$value->mensaje_validacion;
				$respuesta->fidelitas_response[$key]['validacion']=$value->validacion;
				$respuesta->fidelitas_response[$key]['nombre_correcto']=trim($value->nombre_correcto);
				$respuesta->fidelitas_response[$key]['cuit_buscado']=trim($value->cuit_buscado);

				//AFIPController::ontenerPadronA4($value->cuit_buscado); 

//				$domicilios = SQLConnection::backendStoreProcedure('api_info_domicilios_cuit',array($value->cuit_buscado),false);
				$domicilios = SQLConnection::backendStoreProcedure('api_info_domicilios_cuit',array($value->cuit_buscado,$provincia),false);


				$respuesta->fidelitas_response[$key]['domicilios']= $domicilios;  
			}
		}
		else
		{
			$respuesta->identificacion_buscada=$cuit;
			$respuesta->nombre_buscado=$nombre;
			$respuesta->fecha = date("Y-m-d h:i:s");
			$respuesta->codigo_error = 5;
//			$respuesta->mensaje_error='Error en la consulta realizada';
			$respuesta->mensaje_error='No se encontraron datos';
			$respuesta->fidelitas_response = [];
			return json_encode($respuesta);
		}
		//print_r(json_encode($respuesta));die();
		return json_encode($respuesta);
  }

  public static function insertarTyCTrazabilidad(){
	$platform_id  = Request::input('platform_id');
	$user_agent   = Request::input('user_agent');
	$user_ip      = Request::input('user_ip');
	$id_terminos  = Request::input('id_terminos');
	$user_id      = Request::input('user_id');
	$id_padron    = Request::input('id_padron');
	$cliente      = Request::input('cliente');
	$exec = SQLConnection::backendStoreProcedure('insertar_tyc_trazabilidad',array($platform_id,$user_agent,$user_ip,$id_terminos,$user_id,$id_padron,$cliente),'selectOne');
	return $exec->respuesta;
  }

  /* CAME INICIO */
  public static function obtenerTipoCredito(){
	 $usuario_id    = Request::input('UsuarioId');
	 $clave         = Request::input('Clave');
	return json_encode([['idTipoCredito'=>'P','DescripcionTipoCredito'=>'Personal'],['idTipoCredito'=>'T','DescripcionTipoCredito'=>'Tarjeta']]);
  }

  public static function obtenerCaracter(){
	 $usuario_id    = Request::input('UsuarioId');
	 $clave         = Request::input('Clave');
	return json_encode([
	  ['DescripcionCaracter'=>'SOLICITANTE','idCaracter'=>'D'],['DescripcionCaracter'=>'GARANTE','idCaracter'=>'G']
	]);
  }

  public static function obtenerMotivosRechazo(){
	 $usuario_id    = Request::input('UsuarioId');
	 $clave         = Request::input('Clave');
	return json_encode([
	  ['DescripcionMotivo'=>'No Opero','IdMotivo'=>1],['DescripcionMotivo'=>'Referencia Comercial','IdMotivo'=>2],
	  ['DescripcionMotivo'=>'Referencia Laboral','IdMotivo'=>3],['DescripcionMotivo'=>'Pendiente','IdMotivo'=>4]
	]);
  }

  public static function obtenerMotivosAtraso(){
	 $usuario_id    = Request::input('UsuarioId');
	 $clave         = Request::input('Clave');
	return json_encode([
	  ['DescripcionAtraso'=>'CUOTAS ATRASADAS','IdAtraso'=>1],['DescripcionAtraso'=>'COBRO JUDICIAL','IdAtraso'=>5],
	  ['DescripcionAtraso'=>'DESAPARECIDO','IdAtraso'=>6]
	]);
  }

  public static function rechazarInforme(){
	 $usuario_id    = Request::input('UsuarioId');
	 $clave         = Request::input('Clave');
	 $InformeId     = Request::input('InformeId');
	 $IdMotivo      = Request::input('IdMotivo');
	return json_encode([
	  'Status'=>'OK','StatusCode'=>0
	]);
  }

  public static function acordarInforme(){
	 $usuario_id      = Request::input('UsuarioId');
	 $clave           = Request::input('Clave');
	 $id_motivo       = Request::input('idMotivo');
	 $informe_id      = Request::input('InformeId');
	 $id_tipo_credito = Request::input('idTipoCredito');
	 $id_caracter     = Request::input('idCaracter');
	 $numero_credito  = Request::input('NumeroCredito');
	 $importe         = Request::input('Importe');
	 $cuotas          = Request::input('Cuotas');
	 $importe_cuota   = Request::input('ImporteCuota');
	 $FechaVto        = Request::input('FechaVto');
	return json_encode([
	  'Status'=>'OK','StatusCode'=>0
	]);
  }


  public static function desafectarInforme(){
	 $usuario_id      = Request::input('UsuarioId');
	 $clave           = Request::input('Clave');
	 $informe_id      = Request::input('InformeId');
	return json_encode([
	  'Status'=>'OK','StatusCode'=>0
	]);
  }

  public static function afectarInforme(){
	$usuario_id     = Request::input('UsuarioId');
	$clave          = Request::input('Clave');
	$informe_id     = Request::input('InformeId');
	$importe        = Request::input('Importe');
	$cuotas         = Request::input('Cuotas');
	$importe_cuota  = Request::input('ImporteCuota');
	$id_atraso      = Request::input('idAtraso');
	return json_encode([
	  'Status'=>'OK','StatusCode'=>0
	]);
  }

  public static function visualizarSemaforo(){
	$usuario_id      = Request::input('UsuarioId');
	$clave           = Request::input('Clave');
	if(empty($usuario_id)){
	  return json_encode([
	  'Status'=>'ERROR','StatusCode'=>1
	  ]);
	}
	$data = [];
	$listado  = SQLConnection::backendStoreProcedure('monitoreo_por_referencia_listar',array($usuario_id));
	foreach ($listado as $key => $value) {
	  $data[$key] = new stdClass();
	  $data[$key]->Cuil = $value->cuit;
	  $data[$key]->Nombre = $value->nombre;
	  $data[$key]->Color = $value->color;
	  $data[$key]->Localidad = $value->localidad;
	  $data[$key]->Provincia = $value->provincia;
	  $data[$key]->FechaNacimiento = $value->fecha_nacimiento;
	}
	return json_encode(
	  $data
	);
  }

 public static function registrarCliente(){
	$usuario_id      = Request::input('UsuarioId');
	$clave           = Request::input('Clave');
	$persona_cuil    = Request::input('PersonaCuil');
	
	if(empty($usuario_id) || empty($clave) || empty($persona_cuil)){
	  return json_encode([
	  'Status'=>'ERROR','StatusCode'=>1
	  ]);
	}
	$usuario    = Session::get('usuario');
	$user_id    = $usuario->user_id;
	$client_id  = $usuario->cliente['client_id'];
	$respuesta  = json_decode(self::obtenerServicioScore($persona_cuil,true,false));
	$score      = $respuesta->score;
	$monitoreo  = SQLConnection::backendStoreProcedure('monitoreo_por_referencia_agregar',array($usuario_id,$persona_cuil,$client_id,$user_id,$score),true);
   
   if($monitoreo->respuesta == 'error'){
	return json_encode([
	  'Status'=>'ERROR','StatusCode'=>1
	]);
   }

	return json_encode([
	  'Status'=>'OK','StatusCode'=>0
	]);
  }

  public static function anularRegistro(){
	$usuario_id      = Request::input('UsuarioId');
	$clave           = Request::input('Clave');
	$persona_cuil    = Request::input('PersonaCuil'); 
	
	if(empty($usuario_id) || empty($clave) || empty($persona_cuil)){
	  return json_encode([
	  'Status'=>'ERROR','StatusCode'=>1
	  ]);
	}
	$usuario    = Session::get('usuario');
	$user_id    = $usuario->user_id;
	$client_id = $usuario->cliente['client_id'];
	$monitoreo = SQLConnection::backendStoreProcedure('monitoreo_por_referencia_eliminar',array($usuario_id,$persona_cuil,$client_id,$user_id),true);
   
	return json_encode([
	  'Status'=>'OK','StatusCode'=>0
	]);
  }

  public static function listaPersonas(){
	$persona_cuil       = Request::input('Cuil');
	$persona_nombre     = Request::input('Nombre');
	$usuario_id         = Request::input('UsuarioId');
	$clave              = Request::input('Clave');
	$busqueda_por_cuit  = false;
	$persona_cuil       = trim($persona_cuil);
	$persona_nombre     = trim($persona_nombre);
	if (empty($persona_cuil) && empty($persona_nombre)) {
	   return json_encode([
		'Status'=>'Error cuil o nombre','StatusCode'=>1
	  ]);
	}
	if(strlen($persona_cuil) == 11 && is_numeric($persona_cuil)){
	  $busqueda_por_cuit = true;
	}

	$respuesta = [];
	if($busqueda_por_cuit == true){
	  $respuesta = json_decode(self::obtenerBuscadorCompleto($persona_cuil,'',$usuario_id));
	}else{
	  if(strlen($persona_nombre) > 2 ){
		$respuesta = json_decode(self::obtenerBuscadorCompleto('',$persona_nombre,$usuario_id));
	  }else{
		 return json_encode([
		'Status'=>'la cantidad de caracteres del nombre debe ser igual o mayor a 3 caracteres','StatusCode'=>1
	  ]);
	  }
	}
	$data = [];
	foreach ($respuesta as $key => $value) {
	  $data[$key]                   = new stdClass();
	  $data[$key]->Cuil             = $value->identificacion;
	  $data[$key]->Nombre           = $value->nombre_persona;
	  $data[$key]->Documento        = $value->cuerpo_clave;
	  $data[$key]->Sexo             = $value->sexo;
	  $data[$key]->Provincia        = $value->provincia;
	  $data[$key]->Localidad        = $value->localidad;
	  $data[$key]->Color            = '';
	  $data[$key]->FechaNacimiento  = $value->fecha_nacimiento;
	}
	 return json_encode(
	  $data
	);
  }

  public static function registrarUsuario(){
	$usuario_id      = Request::input('UsuarioId');
	$clave           = Request::input('Clave');
	 return json_encode([
	  'Status'=>'OK','StatusCode'=>0
	]);
  }
  /* CAME FIN */ 

 /* Informe Comercial Completo - inicio */
	
 public static function InformeComercialTrad(){
	if ( isset($_POST['cuit']) ){
		$cuit = Request::input('cuit');
		$apikey = Request::input('apikey');
		$json_ic = self::ObtenerInformeComercialCompleto($cuit, $apikey,'ENG');
	}
	/*
	if ( isset($json_ic)){
		$json_trad = self::ICTranslator($json_ic,'ENG');
	}
	return $json_trad;
	*/
	return $json_ic;
 }

 public static function ICTranslatorORG($eljson,$language ='ENG'){
	///deberíamos preguntar que variable de idioma es y hacer la tarducción según ese idioma. Por ahora no se usa.
	$array_ic = json_decode($eljson);
	$array_ic->formaldata = new StdClass();
	$array_ic->corporate_realationships = new StdClass();
	$array_ic->commercial_data = new StdClass();
	$array_ic->fiscal_data = new StdClass(); 
	$array_ic->max_bank_information = new StdClass();
	$array_ic->bcra_linkages = new StdClass();
	$array_ic->bounced_checks = new StdClass();
	$array_ic->legal = new StdClass();
	$partner = new StdClass();
	$participacion = new StdClass();
	$inscripcion = new StdClass();
	$taxe = new StdClass();
	$array_ic->addresses = array();
	$array_ic->more_info = array();
	$array_ic->economic_activity_codes = array();
	$array_ic->banks = array();
	//
	foreach ($array_ic as $key => $value) {
		if( $key == 'formales'){
			$array_ic->formaldata->legal_type = $value->tipo_persona;
			$array_ic->formaldata->taxid = $value->identificacion;
			$array_ic->formaldata->employees = new StdClass();
			$array_ic->formaldata->employees->perc_men = $value->empleados->cantidad_hombres;
			$array_ic->formaldata->employees->perc_women = $value->empleados->cantidad_mujeres;
			$array_ic->formaldata->employees->total_employees = $value->empleados->total;
			$array_ic->formaldata->employees->period = $value->empleados->fecha;
			foreach ($value->mas_info as $key => $val) {
				$more = new StdClass();
				$more->ramo = $val->ramo;
				$more->subramo = $val->subramo;
				$more->social_contract_date = $val->fecha_contrato_social;
				$more->capital = $val->capital;
				$array_ic->more_info[$key] = $more;
			}
			foreach ($value->claes as $key => $cla) {
				$economic_activity = new StdClass();
				$economic_activity->code = $cla->cod_clae;
				$economic_activity->description = $cla->descripcion;
				$array_ic->economic_activity_codes[$key] = $economic_activity;
			}
			$array_ic->person_name = $value->nombre;
			foreach ($value->domicilios as $key => $domi) {
				$addres = new StdClass();
				$addres->address = $domi->domicilio;
				$addres->state = $domi->provincia;
				$addres->city = $domi->localidad;
				$addres->country = $domi->pais;
				$addres->zip_code = $domi->cp;
				$array_ic->addresses[$key] = $addres;
			}
			unset($array_ic->formales);
		} elseif ( $key == 'balances' ) {
			$balance_reply = $value;
			unset($array_ic->balances);
			$array_ic->balances = $balance_reply;	
		} elseif( $key == 'relaciones' ){
			$array_ic->corporate_realationships->partners = array();
			foreach ($value->socios as $key => $soc) {
				$partner = new StdClass();
				$partner->taxid = $soc->cuit;
				$partner->country = $soc->pais;
				$partner->person_name = $soc->nombre_persona;
				$partner->position = $soc->cargo;
				$partner->from_date = $soc->desde;
				$partner->to_date = $soc->hasta;
				$array_ic->corporate_realationships->partners[$key] = $partner;
			} 
			$array_ic->corporate_realationships->shareholding_activity = array();
			foreach ($value->participaciones as $key => $part) {
				$array_ic->corporate_realationships->shareholding_activity[$key] = new StdClass();
				$array_ic->corporate_realationships->shareholding_activity[$key]->legal_name = $part->razon_social_sociedad;
				$array_ic->corporate_realationships->shareholding_activity[$key]->taxid = $part->cuit_sociedad;
				$array_ic->corporate_realationships->shareholding_activity[$key]->taxid_sharheolder = $part->cuit_socio;
				$array_ic->corporate_realationships->shareholding_activity[$key]->legal_name_shareholder = $part->nombre_socio;
				$array_ic->corporate_realationships->shareholding_activity[$key]->role = $part->cargo;
			}
			$array_ic->corporate_realationships->linkages = array();
			foreach ($value->vinculaciones as $key => $vinc) {
				$vinculacion = new StdClass();
				$vinculacion->tax_id = $vinc->cuit;
				$vinculacion->person_name = $vinc->nombre_persona;
				$vinculacion->tipo = $vinc->tipo;
				$vinculacion->detalle = $vinc->detalle;
				$array_ic->corporate_realationships->linkages[$key] = $vinculacion;
			}
			unset($array_ic->relaciones);
		} elseif ( $key == 'comerciales' ) {
			$array_ic->commercial_data->qtyqueries = $value->consultas;
			$array_ic->commercial_data->insurances = $value->seguros;
			$array_ic->commercial_data->brands = $value->marcas;
			unset($array_ic->comerciales);
		} elseif( $key == 'fiscales' ) {
			$array_ic->fiscal_data->aportes = $value->aportes;
			$array_ic->fiscal_data->economic_activity_code = array();
			foreach ($value->clae as $key => $cla) {
				$array_ic->fiscal_data->economic_activity_code[$key]['code'] = $cla->cod_clae;
				$array_ic->fiscal_data->economic_activity_code[$key]['description'] = $cla->descripcion;
				$array_ic->fiscal_data->economic_activity_code[$key]['start_date'] = $cla->fecha_inicio_actividad;
				$array_ic->fiscal_data->economic_activity_code[$key]['principal'] = $cla->principal;
			}
			$array_ic->fiscal_data->registered_taxes = array();
			foreach ($value->inscripciones as $key => $insc) {
				$inscripcion->social_contract_date = $insc->fecha_contrato_social;
				$inscripcion->inscription_number = $insc->numero_inscripcion;
				$inscripcion->registration_date = $insc->fecha_inscripcion;
				$inscripcion->monotributo = $insc->monotributo;
				$inscripcion->beginning_of_operations = $insc->inicio_actividad;
				$inscripcion->employer = $insc->empleador;
				$array_ic->fiscal_data->registered_taxes[$key] = $inscripcion;
			}
			$array_ic->fiscal_data->taxes = array();
			foreach ($value->impuestos as $key => $impu) {
				$taxe->tax_code = $impu->codigo_impuesto;
				$taxe->tax_name = $impu->nombre_impuesto;
				$taxe->registration_date = $impu->fecha_inscripcion;
				$taxe->status = $impu->estado;
				$array_ic->fiscal_data->taxes[$key] = $taxe;
			}
			$array_ic->fiscal_data->apocryphal_invoices = $value->facturas_apocrifas;
			$array_ic->fiscal_data->sircreb = $value->sircreb;
			$array_ic->fiscal_data->arba = $value->arba;
			unset($array_ic->fiscales);
		} elseif( $key == 'periodos' ){
			$array_ic->max_bank_information->period = $value->bancos;
			unset($array_ic->periodos);
		} elseif( $key == 'bancos' ){
			$array_ic->banks = array();
			foreach ($array_ic->bancos as $key => $ban) {
				$banc = new StdClass();
				$banc->bank_code = $ban->codigo_entidad;
				$banc->bank_name = $ban->nombre_entidad;
				$banc->period = $ban->periodo;
				$banc->status = $ban->situacion;
				$banc->amount = $ban->monto;
				$banc->days_late = $ban->dias_atraso;
				$array_ic->banks[$key] = $banc; 
			}
			unset($array_ic->bancos);
		} elseif( $key == 'vinculados_segun_bcra'){
			$array_ic->bcra_linkages = $value;
			unset($array_ic->vinculados_segun_bcra);
		} elseif ( $key == 'cheques' ) {
			$array_ic->bounced_checks = $value;
			unset($array_ic->cheques);
		} elseif ( $key == 'score' ) {
			$score_repli = new StdClass();
			$score_repli = $array_ic->score;
			$array_ic->score = new StdClass();
			$array_ic->score->value = $score_repli->valor;
		} elseif ( $key == 'comex' ) {	
			$comex_repli = new StdClass();
			$comex_repli = $array_ic->comex;
			$array_ic->comex = new StdClass();
			$array_ic->comex->imports = $comex_repli->importaciones;
			$array_ic->comex->total = $comex_repli->totales;
		} elseif ( $key == 'legales' ) {	
			$array_ic->legal = $value;
			unset($array_ic->legales);
		}
	}
	return json_encode($array_ic);
 }
	public static function ICTranslator($eljson,$language ='ENG'){
		///deberíamos preguntar que variable de idioma es y hacer la tarducción según ese idioma. Por ahora no se usa.
		$array_ic = json_decode($eljson);
		$array_response = (object) [];
		//
		/* foreach ($array_ic as $clave_ic => $value) {
			if( $clave_ic == 'formales'){
				// FORMALES
				$value->legal_type = $value->tipo_persona;
				$value->taxid = $value->identificacion;
				$value->employees = (object) ['perc_men' => $value->empleados->cantidad_hombres,'perc_women' => $value->empleados->cantidad_mujeres,'total_employees' => $value->empleados->total,'period' => $value->empleados->fecha];
				//
				foreach ($value->mas_info as $key_mas_info => $val) {
					$value->more_info[] = (object)['ramo' => $val->ramo, 'subramo' => $val->subramo,'social_contract_date' => $val->fecha_contrato_social,'capital' => $val->capital];
				}
				foreach ($value->claes as $key_clae => $cla) {
					$value->economic_activity_codes[] = (object)['code' => $cla->cod_clae, 'description' => $cla->descripcion];
				}
				$value->person_name = $value->nombre;
				foreach ($value->domicilios as $key => $domi) {
					$value->addresses[] = (object) ['address' => $domi->domicilio,'state' => $domi->provincia,'city' => $domi->localidad,'country' => $domi->pais,'zip_code' => $domi->cp];
				}
				//
				unset($value->nombre);
				unset($value->domicilios);
				unset($value->claes);
				unset($value->mas_info);
				unset($value->tipo_persona);
				unset($value->identificacion);
				unset($value->empleados);
				//
				$array_response->formaldata = $array_ic->formales;
			} elseif ( $clave_ic == 'balances' ) {
				// BALANCES (FALTA TRADUCIR NODO)
				$array_response->balances = $value;	
			} elseif( $clave_ic == 'relaciones' ){
				// RELACIONES
				foreach ($value->socios as $key => $soc) {
					$array_ic->relaciones->partners[] = (object)[
						'taxid' => $soc->cuit,
						'country' => $soc->pais,
						'person_name' => $soc->nombre_persona,
						'position' => $soc->cargo,
						'from_date' => $soc->desde,
						'to_date' => $soc->hasta
					];
				}
				//
				foreach ($value->participaciones as $key => $part) {
					$array_ic->relaciones->shareholding_activity[] = (object)[
						'legal_name' => $part->razon_social_sociedad,
						'taxid' => $part->cuit_sociedad,
						'taxid_sharheolder' => $part->cuit_socio,
						'legal_name_shareholder' => $part->nombre_socio,
						'role' => $part->cargo
					];
				}
				//
				foreach ($value->vinculaciones as $key => $vinc) {
					$array_ic->relaciones->linkages[] = (object) [ 
						'tax_id' => $vinc->cuit,
						'person_name' => $vinc->nombre_persona,
						'type' => $vinc->tipo,
						'details' => $vinc->detalle
					];
				}
				//
				unset($value->socios);
				unset($value->participaciones);
				unset($value->vinculaciones);
				//
				$array_response->corporate_realationships = $value;
				//
			} elseif ( $clave_ic == 'comerciales' ) {
				// COMERCIALES (FALTA TRADUCIR NODO)
				$value->qtyqueries = $value->consultas;
				$value->insurances = $value->seguros;
				$value->brands = $value->marcas;
				//
				unset($value->consultas);
				unset($value->seguros);
				unset($value->marcas);
				//
				$array_response->commercial_data = $value;
			} elseif( $clave_ic == 'fiscales' ) {
				// FISCALES (FALTA TRADUCIR NODO)
				$value->aportes = $value->aportes;
				$value->economic_activity_code = array();
				foreach ($value->clae as $key => $cla) {
					$value->economic_activity_code[$key]['code'] = $cla->cod_clae;
					$value->economic_activity_code[$key]['description'] = $cla->descripcion;
					$value->economic_activity_code[$key]['start_date'] = $cla->fecha_inicio_actividad;
					$value->economic_activity_code[$key]['principal'] = $cla->principal;
				}
				//
				foreach ($value->inscripciones as $key => $insc) {
					$value->registered_taxes[] = (object)[
						'social_contract_date' => $insc->fecha_contrato_social,
						'inscription_number' => $insc->numero_inscripcion,
						'registration_date' => $insc->fecha_inscripcion,
						'monotributo' => $insc->monotributo,
						'beginning_of_operations' => $insc->inicio_actividad,
						'employer' => $insc->empleador
					];
				}
				//
				foreach ($value->impuestos as $key => $impu) {
					$value->taxes[] = (object) [
						'tax_name' => $impu->nombre_impuesto,
						'registration_date' => $impu->fecha_inscripcion,
						'status' => $impu->estado
					];
				}
				$value->apocryphal_invoices = $value->facturas_apocrifas;
				$value->sircreb = $value->sircreb;
				$value->arba = $value->arba;
				//
				unset($value->aportes);
				unset($value->inscripciones);
				unset($value->impuestos);
				unset($value->clae);
				unset($value->apocryphal_invoices);
				unset($value->sircreb);
				unset($value->arba);
				//
				$array_response->fiscal_data = $value;
			} elseif( $clave_ic == 'periodos' ){
				// PERIODOS
				$value->period = $value->bancos;
				unset($value->bancos);
				$array_response->max_bank_information = $value;
			} elseif( $clave_ic == 'bancos' ){
				// BANCOS
				foreach ($value as $key => $ban) {
					$array_response->banks[] = (object) [
						'bank_code' => $ban->codigo_entidad,
						'bank_name' => $ban->nombre_entidad,
						'period' => $ban->periodo,
						'status' => $ban->situacion,
						'amount' => $ban->monto,
						'days_late' => $ban->dias_atraso
					];
				}
			} elseif( $clave_ic == 'vinculados_segun_bcra'){
				// VINCULACIONES SEGUN BCRA (FALTA TRADUCIR NODO)
				$array_response->bcra_linkages = $value;
			} elseif ( $clave_ic == 'cheques' ) {
				// CHEQUES (FALTA TRADUCIR NODO)
				$array_response->bounced_checks = $value;
			} elseif ( $clave_ic == 'score' ) {
				// SCORE
				$value->value = $value->valor;
				unset($value->valor);
				$array_response->score = $value;
			} elseif ( $clave_ic == 'comex' ) {	
				// COMEX (FALTA TRADUCIR NODO IMPORTS)
				$value->imports = $value->importaciones;
				$value->total = $value->totales;
				unset($value->importaciones);
				unset($value->totales);
				$array_response->comex = $value;
			} elseif ( $clave_ic == 'legales' ){
				$array_response->legal = $value;
			}
			unset($array_ic->$clave_ic);
		} */
		//
		// FORMALES
		$array_ic->formales->legal_type = $array_ic->formales->tipo_persona;
		$array_ic->formales->taxid = $array_ic->formales->identificacion;
		$array_ic->formales->employees = (object) ['perc_men' => $array_ic->formales->empleados->cantidad_hombres,'perc_women' => $array_ic->formales->empleados->cantidad_mujeres,'total_employees' => $array_ic->formales->empleados->total,'period' => $array_ic->formales->empleados->fecha];
		//
		foreach ($array_ic->formales->mas_info as $key_mas_info => $val) {
			$array_ic->formales->more_info[] = (object)['ramo' => $val->ramo, 'subramo' => $val->subramo,'social_contract_date' => $val->fecha_contrato_social,'capital' => $val->capital];
		}
		foreach ($array_ic->formales->claes as $key_clae => $cla) {
			$array_ic->formales->economic_activity_codes[] = (object)['code' => $cla->cod_clae, 'description' => $cla->descripcion];
		}
		$array_ic->formales->person_name = $array_ic->formales->nombre;
		foreach ($array_ic->formales->domicilios as $key => $domi) {
			$array_ic->formales->addresses[] = (object) ['address' => $domi->domicilio,'state' => $domi->provincia,'city' => $domi->localidad,'country' => $domi->pais,'zip_code' => $domi->cp];
		}
		//
		unset($array_ic->formales->nombre);
		unset($array_ic->formales->domicilios);
		unset($array_ic->formales->claes);
		unset($array_ic->formales->mas_info);
		unset($array_ic->formales->tipo_persona);
		unset($array_ic->formales->identificacion);
		unset($array_ic->formales->empleados);
		//
		$array_response->formaldata = $array_ic->formales;
		// BALANCES (FALTA TRADUCIR NODO)
		$array_response->balances = $array_ic->balances;	
		// RELACIONES
		foreach ($array_ic->relaciones->socios as $key => $soc) {
			$array_ic->relaciones->partners[] = (object)[
				'taxid' => $soc->cuit,
				'country' => $soc->pais,
				'person_name' => $soc->nombre_persona,
				'position' => $soc->cargo,
				'from_date' => $soc->desde,
				'to_date' => $soc->hasta
			];
		}
		foreach ($array_ic->relaciones->participaciones as $key => $part) {
			$array_ic->relaciones->shareholding_activity[] = (object)[
				'legal_name' => $part->razon_social_sociedad,
				'taxid' => $part->cuit_sociedad,
				'taxid_sharheolder' => $part->cuit_socio,
				'legal_name_shareholder' => $part->nombre_socio,
				'role' => $part->cargo
			];
		}
		foreach ($array_ic->relaciones->vinculaciones as $key => $vinc) {
			$array_ic->relaciones->linkages[] = (object) [ 
				'tax_id' => $vinc->cuit,
				'person_name' => $vinc->nombre_persona,
				'type' => $vinc->tipo,
				'details' => $vinc->detalle
			];
		}
		unset($array_ic->relaciones->socios);
		unset($array_ic->relaciones->participaciones);
		unset($array_ic->relaciones->vinculaciones);
		$array_response->corporate_realationships = $array_ic->relaciones;
	
		// COMERCIALES (FALTA TRADUCIR NODO)
		$array_ic->comerciales->qtyqueries = $array_ic->comerciales->consultas;
		$array_ic->comerciales->insurances = $array_ic->comerciales->seguros;
		$array_ic->comerciales->brands = $array_ic->comerciales->marcas;
		unset($array_ic->comerciales->consultas);
		unset($array_ic->comerciales->seguros);
		unset($array_ic->comerciales->marcas);
		$array_response->commercial_data = $array_ic->comerciales;
	
		// FISCALES (FALTA TRADUCIR NODO)
		$array_ic->fiscales->aportes = $array_ic->fiscales->aportes;
		$array_ic->fiscales->economic_activity_code = array();
		foreach ($array_ic->fiscales->clae as $key => $cla) {
			$array_ic->fiscales->economic_activity_code[$key]['code'] = $cla->cod_clae;
			$array_ic->fiscales->economic_activity_code[$key]['description'] = $cla->descripcion;
			$array_ic->fiscales->economic_activity_code[$key]['start_date'] = $cla->fecha_inicio_actividad;
			$array_ic->fiscales->economic_activity_code[$key]['principal'] = $cla->principal;
		}
		//
		foreach ($array_ic->fiscales->inscripciones as $key => $insc) {
			$array_ic->fiscales->registered_taxes[] = (object)[
				'social_contract_date' => $insc->fecha_contrato_social,
				'inscription_number' => $insc->numero_inscripcion,
				'registration_date' => $insc->fecha_inscripcion,
				'monotributo' => $insc->monotributo,
				'beginning_of_operations' => $insc->inicio_actividad,
				'employer' => $insc->empleador
			];
		}
		//
		foreach ($array_ic->fiscales->impuestos as $key => $impu) {
			$array_ic->fiscales->taxes[] = (object) [
				'tax_name' => $impu->nombre_impuesto,
				'registration_date' => $impu->fecha_inscripcion,
				'status' => $impu->estado
			];
		}
		$array_ic->fiscales->apocryphal_invoices = $array_ic->fiscales->facturas_apocrifas;
		$array_ic->fiscales->sircreb = $array_ic->fiscales->sircreb;
		$array_ic->fiscales->arba = $array_ic->fiscales->arba;
		unset($array_ic->fiscales->aportes);
		unset($array_ic->fiscales->inscripciones);
		unset($array_ic->fiscales->impuestos);
		unset($array_ic->fiscales->clae);
		unset($array_ic->fiscales->apocryphal_invoices);
		unset($array_ic->fiscales->sircreb);
		unset($array_ic->fiscales->arba);
		$array_response->fiscal_data = $array_ic->fiscales;
	
		// PERIODOS
		$array_ic->periodos->period = $array_ic->periodos->bancos;
		unset($array_ic->periodos->bancos);
		$array_response->max_bank_information = $array_ic->periodos;
	
		// BANCOS
		foreach ($array_ic->bancos as $key => $ban) {
			$array_response->banks[] = (object) [
				'bank_code' => $ban->codigo_entidad,
				'bank_name' => $ban->nombre_entidad,
				'period' => $ban->periodo,
				'status' => $ban->situacion,
				'amount' => $ban->monto,
				'days_late' => $ban->dias_atraso
			];
		}
	
		// VINCULACIONES SEGUN BCRA (FALTA TRADUCIR NODO)
		$array_response->bcra_linkages = $array_ic->vinculados_segun_bcra;
	
		// CHEQUES (FALTA TRADUCIR NODO)
		$array_response->bounced_checks = $array_ic->cheques;
	
		// SCORE
		$array_ic->score->value = $array_ic->score->valor;
		unset($array_ic->score->valor);
		$array_response->score = $array_ic->score;
	
		// COMEX (FALTA TRADUCIR NODO IMPORTS)
		$array_ic->comex->imports = $array_ic->comex->importaciones;
		$array_ic->comex->total = $array_ic->comex->totales;
		unset($array_ic->comex->importaciones);
		unset($array_ic->comex->totales);
		$array_response->comex = $array_ic->comex;
	
		// LEGALES
		$array_response->legal = $array_ic->legales;


		return json_encode($array_response);
	}
  	/* Informe Comercial Completo - fin */

  
  /* Informe Comercial Completo - inicio */
	public static function ObtenerInformeComercialCompleto($cuit='',$apikey='',$idioma='ESP'){
		//datos básicos y declaraciones de clases y arrays, para que no fallen
		if(!$cuit){
		    $cuit         = Request::input('cuit');
		}
		/* 22/07/2021 Agregamos que pase por afip */
		if(!empty($cuit) && strlen($cuit) == 11){
			AFIPController::obtenerPadron($cuit,true,'AR',false);
		}
		// $idioma = (Request::input('idioma') !== NULL ) ? Request::input('idioma') : 'ESP';

		$usuario        = Session::get('usuario');
		$user_id        = $usuario->user_id;

		// AGB por favor transaccionar el ID producto que corresponde a cada APIKEY . Está usando fijo el 55 y ese producto se llama
		// informe comercial Teipesa. Creditsafe y Mati usan esta ruta con diferentes apikey y con el producto 79
		// Luego hay que actualizar la base de datos para que los consumos del 55 se muevan al 79 para estos dos clientes
		// El apikey se controla en api.php pero el producto del apikey se ignora.

		$producto       = $usuario->producto ?? 55;
		//$p_ip   = $_SERVER['REMOTE_ADDR'];
		//$csa = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$cuit,$producto,$p_ip),'selectOne');
		$csa = self::consumir_servicio($cuit,$producto);

		//SQLConnection::consumirServicio($user_id,$cuit,55);

		if(!$apikey){
		  	$apikey         = Request::input('apikey');
		}
		$user_id        = 0;
		$persona        = new stdClass();
		$configuracion  = [];
		$cuit_validado = Misc::validarCuit($cuit);
		if(!$cuit_validado){
		    return json_encode(['error'=>'Cuit Inválido']);
		}
		$respuesta        = json_decode(self::obtenerServicioScore($cuit,true,false));
		$idp            = SQLConnection::obtenerIdPadron($cuit);
		$id_padron      = $idp->id_padron;

		//obtengo la configuración para este cliente/usuario y veo que secciones le habilito
		if($apikey){
		  	$configuracion = SQLConnection::backendStoreProcedure('api_obtener_configuracion_secciones',array($apikey),true);
		}
		
		//si tiene la configuración de formales, tomamos todos los datos posibles del formales. (defunción, domicilios, datos personales. etc.)
		if($configuracion->formales == true){
			//definicion de variables compartidas.
			$nombre             = '';
			
			$defuncion          = SQLConnection::backendStoreProcedure('obtener_defuncion',array($cuit),true);
			$fisica_juridica    = Misc::tipoPersona($cuit);
			$p_fisica           = ($fisica_juridica == 'F') ? 'FISICA' : 'JURIDICA';
			
			if( $idioma == 'ESP' ){
				$persona->formales  = new stdClass();
				$persona->formales->tipo_persona = $p_fisica;	
			} elseif( $idioma == 'ENG' ){
				$persona->formaldata  = new stdClass();
				$persona->formaldata->legal_type = $p_fisica;	
			}

			$telefonos          = SQLConnection::backendStoreProcedure('obtener_telefono', array($id_padron));
			
			if( $idioma == 'ESP' ){
				$persona->formales->identificacion = $cuit;
			} elseif( $idioma == 'ENG' ){
				$persona->formaldata->taxid = $cuit;
			}

			if($fisica_juridica == 'F'){
				$datos_persona                      = SQLConnection::backendStoreProcedure('obtener_persona', array($cuit),true);
				$nombre                             = $datos_persona->nombre_persona;
				$dni                                = (int)substr($cuit, 2,-1);
				$empleado_de                        = SQLConnection::backendStoreProcedure('obtener_empleado_de', array($cuit));
				if( $idioma == 'ESP' ){
					$persona->formales->dni             = (string)$dni;
					$persona->formales->telefonos       = $telefonos;
					$persona->formales->sexo            = $datos_persona->sexo;
					$persona->formales->anio_nacimiento = $datos_persona->anio_nacimiento;
					//$persona->formales->nacionalidad    = ''; // en www2 estaba sacada esta linea
					//$persona->formales->ejemplar        = '';
					$persona->formales->defuncion = new stdClass();
				} elseif( $idioma == 'ENG' ){
					$persona->formaldata->national_id             = (string)$dni;
					$persona->formaldata->phone       = $telefonos;
					$persona->formaldata->gender            = $datos_persona->sexo;
					$persona->formaldata->YOB = $datos_persona->anio_nacimiento;
					//$persona->formaldata->nacionalidad    = ''; // en www2 estaba sacada esta linea
					//$persona->formaldata->ejemplar        = '';
					$persona->formaldata->death_info = new stdClass();
				}

				if(!empty($datos_persona->fecha_nacimiento)){
				$edad = Misc::calcularEdad($datos_persona->fecha_nacimiento);
				if($edad){
					if( $idioma == 'ESP' ){
						$persona->formales->edad = $edad;
					} elseif( $idioma == 'ENG' ){
						$persona->formaldata->age = $edad;
					}
				}
				}
				
				if( $idioma == 'ESP' ){
					$persona->formales->empleado_de       = $empleado_de;
					$persona->formales->profesion         = $datos_persona->profesion;
					$persona->formales->fecha_nacimiento  = $datos_persona->fecha_nacimiento;
					$persona->formales->estado_civil      = $datos_persona->estado_civil;
					
					$persona->formales->defuncion->fuente       = !empty($defuncion->fuente)        ? $defuncion->fuente : '-' ;
					$persona->formales->defuncion->fecha_deceso = !empty($defuncion->fecha_deceso)  ? $defuncion->fecha_deceso : '-'  ;
					$persona->formales->defuncion->defuncion    = !empty($defuncion->defuncion)     ? $defuncion->defuncion : '-'  ;
				} elseif( $idioma == 'ENG' ){
					// FALTA TRADUCIR
					$persona->formaldata->employee_of       = $empleado_de;
					$persona->formaldata->profession         = $datos_persona->profesion;
					$persona->formaldata->DOB  = $datos_persona->fecha_nacimiento;
					$persona->formaldata->marital_status      = $datos_persona->estado_civil;
					
					$persona->formaldata->death_info->source       = !empty($defuncion->fuente)        ? $defuncion->fuente : '-' ;
					$persona->formaldata->death_info->DOD = !empty($defuncion->fecha_deceso)  ? $defuncion->fecha_deceso : '-'  ;
					$persona->formaldata->death_info->isdead    = !empty($defuncion->defuncion)     ? $defuncion->defuncion : '-'  ;
				}
			}else{
				$nombre       	= SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
				$sociedades 	= SQLConnection::backendStoreProcedure('obtener_sociedades', array($cuit));
				$info_empresa_formales = [];
				$card_empleados = SQLConnection::backendStoreProcedure('obtener_empleados', array($cuit),'selectOne');
				if(isset($card_empleados->total)){
					if( $idioma == 'ESP' ){
						$card_empleados->total = (int)$card_empleados->total;
					} elseif( $idioma == 'ENG' ){
						$card_empleados->perc_men = $card_empleados->cantidad_hombres;
						$card_empleados->perc_women = $card_empleados->cantidad_mujeres;
						$card_empleados->total_employees = (int)$card_empleados->total;
						$card_empleados->period = $card_empleados->fecha;
						unset($card_empleados->cantidad_mujeres);
						unset($card_empleados->cantidad_hombres);
						unset($card_empleados->total);
						unset($card_empleados->fecha);
					}
				}
				if( $idioma == 'ESP' ){
					$persona->formales->empleados = $card_empleados;
				} elseif( $idioma == 'ENG' ){
					$persona->formaldata->employees = $card_empleados;
				}

				if( $idioma == 'ESP' ){
					foreach ($sociedades as $key => $value) {
						$info_empresa_formales[$key] 								= new stdClass();
						$info_empresa_formales[$key]->ramo 							= $value->ramo; 
						$info_empresa_formales[$key]->subramo 						= $value->subramo; 
						$info_empresa_formales[$key]->fecha_contrato_social 		= $value->fecha_cons; 
						$info_empresa_formales[$key]->capital 						= (int)$value->capital; 
					}
					$persona->formales->mas_info = $info_empresa_formales;
				} elseif( $idioma == 'ENG' ){
					foreach ($sociedades as $key => $value) {
						$info_empresa_formales[$key] 								= new stdClass();
						$info_empresa_formales[$key]->ramo 							= $value->ramo; 
						$info_empresa_formales[$key]->subramo 						= $value->subramo; 
						$info_empresa_formales[$key]->social_contract_date 		= $value->fecha_cons; 
						$info_empresa_formales[$key]->capital 						= (int)$value->capital; 
					}
					$persona->formaldata->more_info = $info_empresa_formales;
				}
				
				$claes_info    	= SQLConnection::backendStoreProcedure('obtener_clae', array($cuit));
				$claes 			= [];
				
				if( $idioma == 'ESP' ){
					foreach ($claes_info as $key => $value) {
						$claes[$key] 				= new stdClass();
						$claes[$key]->cod_clae 		= $value->cod_clae; 
						$claes[$key]->descripcion 	= $value->descripcion; 
					}
					$persona->formales->claes = $claes;
				} elseif( $idioma == 'ENG' ){
					foreach ($claes_info as $key => $value) {
						$claes[$key] 				= new stdClass();
						$claes[$key]->clae_code 		= $value->cod_clae; 
						$claes[$key]->description 	= $value->descripcion; 
					}
					$persona->formaldata->economic_activity = $claes;
				}
			}
			

			if( $idioma == 'ESP' ){
				$persona->formales->nombre  = $nombre;
				$persona->formales->domicilios = new stdClass();
			} elseif( $idioma == 'ENG' ){
				$persona->formaldata->legal_name  = $nombre;
				$persona->formaldata->addresses = new stdClass();
			}
			
			$domicilios = SQLConnection::backendStoreProcedure('sp_obtener_domicilios', array($cuit));

		  	if(!empty($domicilios)){
				if( $idioma == 'ESP' ){
					foreach ($domicilios as $key => $value) {
						$domicilios[$key]->domicilio  = $domicilios[$key]->domicilio;
						$domicilios[$key]->provincia  = $domicilios[$key]->prv_nombre;
						$domicilios[$key]->localidad  = $domicilios[$key]->loc_nombre;
						$domicilios[$key]->pais       = $domicilios[$key]->pai_nombre;
						$domicilios[$key]->cp         = $domicilios[$key]->codpos;
						unset($domicilios[$key]->domicilio);
						unset($domicilios[$key]->prv_nombre);
						unset($domicilios[$key]->loc_nombre);
						unset($domicilios[$key]->pai_nombre);
						unset($domicilios[$key]->codpos);
						unset($domicilios[$key]->id);
						unset($domicilios[$key]->tipo_domicilio);
						unset($domicilios[$key]->created);
					}
					$persona->formales->domicilios = $domicilios;
				} elseif( $idioma == 'ENG' ){
					// nahu
					foreach ($domicilios as $key => $value) {
						$domicilios[$key]->address = $domicilios[$key]->domicilio;
						$domicilios[$key]->state  = $domicilios[$key]->prv_nombre;
						$domicilios[$key]->city  = $domicilios[$key]->loc_nombre;
						$domicilios[$key]->country       = $domicilios[$key]->pai_nombre;
						$domicilios[$key]->zip_code         = $domicilios[$key]->codpos;
						unset($domicilios[$key]->domicilio);
						unset($domicilios[$key]->prv_nombre);
						unset($domicilios[$key]->loc_nombre);
						unset($domicilios[$key]->pai_nombre);
						unset($domicilios[$key]->codpos);
						unset($domicilios[$key]->id);
						unset($domicilios[$key]->tipo_domicilio);
						unset($domicilios[$key]->created);
					}
					$persona->formaldata->addresses = $domicilios;
				}
			}
		}

		// FALTA TARDUCIR NODO BALANCE
		if( $idioma == 'ESP' ){
			$persona->balances = [];
			$persona->balances  = SQLConnection::backendStoreProcedure('api_obtener_balances', array($cuit));
		} elseif( $idioma == 'ENG' ){
			// FALTA TRADUCIR
			$persona->balance_sheets = [];
			$persona->balance_sheets  = SQLConnection::backendStoreProcedure('api_obtener_balances', array($cuit));
		}

		$participaciones  = [];
		//$vinculaciones    = []; // estaba wn www2
		//$relaciones       = []; // estaba wn www2 
	 
		//Información socios/directores/sociedades.
		if($configuracion->relaciones  == true){
			if( $idioma == 'ESP' ){
				$persona->relaciones = new stdClass();
				$persona->relaciones->socios          = [];
				$persona->relaciones->participaciones = [];
				$persona->relaciones->vinculaciones   = [];
				if($fisica_juridica == 'F'){
				$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
				$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
				$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));
	
				}else{
				$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
				$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
				$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));
				}
				$i = 0;
				foreach($participaciones as $key => $value){
				$persona->relaciones->participaciones[$i]                = new stdClass();
				$persona->relaciones->participaciones[$i]->razon_social_sociedad  = $value->nombre_sociedad;
				$persona->relaciones->participaciones[$i]->cuit_sociedad          = $value->cuit_sociedad;
				$persona->relaciones->participaciones[$i]->cuit_socio             = $value->cuit_socio;
				$persona->relaciones->participaciones[$i]->nombre_socio           = $value->nombre_socio;
				$persona->relaciones->participaciones[$i]->cargo                  = $value->cargo;
				$i++;
				}
	
				$i = 0;
				foreach($relaciones as $key => $value){
				$persona->relaciones->socios[$i]                  = new stdClass();
				$persona->relaciones->socios[$i]->cuit            = $value->cuit;
				$persona->relaciones->socios[$i]->pais            = $value->country_name;
				$persona->relaciones->socios[$i]->nombre_persona  = $value->nombre_persona;
				$persona->relaciones->socios[$i]->cargo           = $value->car_nombre;
				$persona->relaciones->socios[$i]->desde           = $value->c04_periodo_desde;
				$persona->relaciones->socios[$i]->hasta           = $value->c04_periodo_hasta;
				$i++;
				} 
				$i = 0;
				foreach($vinculaciones as $key => $value){
				$persona->relaciones->vinculaciones[$i]                  = new stdClass();
				$persona->relaciones->vinculaciones[$i]->cuit            = $value->cuit_vinculada;
				$persona->relaciones->vinculaciones[$i]->nombre_persona  = $value->nombre_persona;
				$persona->relaciones->vinculaciones[$i]->tipo            = $value->nombre;
				$persona->relaciones->vinculaciones[$i]->detalle         = $value->detalle;
				$i++;
				}

			} elseif ( $idioma == 'ENG' ) {

				$persona->corporate_realationships = new stdClass();
				$persona->corporate_realationships->partners = [];
				$persona->corporate_realationships->shareholding_activity = [];
				$persona->corporate_realationships->linkages = [];
				if($fisica_juridica == 'F'){
				$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
				$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
				$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));
	
				}else{
				$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
				$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
				$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));
				}
				$i = 0;
				foreach($participaciones as $key => $value){
				$persona->corporate_realationships->shareholding_activity[$i] = new stdClass();
				$persona->corporate_realationships->shareholding_activity[$i]->legal_name = $value->nombre_sociedad;
				$persona->corporate_realationships->shareholding_activity[$i]->taxid = $value->cuit_sociedad;
				$persona->corporate_realationships->shareholding_activity[$i]->taxid_sharheolder = $value->cuit_socio;
				$persona->corporate_realationships->shareholding_activity[$i]->legal_name_shareholder = $value->nombre_socio;
				$persona->corporate_realationships->shareholding_activity[$i]->role = $value->cargo;
				$i++;
				}
	
				$i = 0;
				foreach($relaciones as $key => $value){
				$persona->corporate_realationships->partners[$i]                  = new stdClass();
				$persona->corporate_realationships->partners[$i]->taxid            = $value->cuit;
				$persona->corporate_realationships->partners[$i]->country            = $value->country_name;
				$persona->corporate_realationships->partners[$i]->legal_name  = $value->nombre_persona;
				$persona->corporate_realationships->partners[$i]->position           = $value->car_nombre;
				$persona->corporate_realationships->partners[$i]->from_date           = $value->c04_periodo_desde;
				$persona->corporate_realationships->partners[$i]->to_date           = $value->c04_periodo_hasta;
				$i++;
				} 
				$i = 0;
				foreach($vinculaciones as $key => $value){
				$persona->corporate_realationships->linkages[$i]              = new stdClass();
				$persona->corporate_realationships->linkages[$i]->tax_id      = $value->cuit_vinculada;
				$persona->corporate_realationships->linkages[$i]->legal_name  = $value->nombre_persona;
				$persona->corporate_realationships->linkages[$i]->tipo        = $value->nombre;
				$persona->corporate_realationships->linkages[$i]->detalle     = $value->detalle;
				$i++;
				}
			}
		}


		//Información Comercial.
		if($configuracion->comerciales == true){
		  if( $idioma == 'ESP' ){
			$persona->comerciales = new stdClass(); 
		  } elseif( $idioma == 'ENG' ){
			$persona->commercial_data = new stdClass(); 
		  }
		  $consultas_ramos  = SQLConnection::backendStoreProcedure('obtener_consulta_por_ramos', array($cuit,12));
		  $seguros          = SQLConnection::backendSeguros($cuit);
		  $marcas           = SQLConnection::backendStoreProcedure('obtener_marcas', array($cuit));
		  $consultas = [];
		  if($consultas_ramos){
			if( $idioma == 'ESP' ){
				foreach($consultas_ramos as $key_ramo => $consulta){
					$consultas[$key_ramo]['nombre']    = $consulta->descripcion;
					$consultas[$key_ramo][$consulta->antiguedad]  = $consulta->cantidad;
				}

				foreach($consultas as $key => $consulta){
					if(!isset($consultas[$key]['entre_0_1'])){
						$consultas[$key]['entre_0_1'] = 0;
					}
					if(!isset($consultas[$key]['entre_1_2'])){
						$consultas[$key]['entre_1_2'] = 0;
					}
					if(!isset($consultas[$key]['entre_2_5'])){
						$consultas[$key]['entre_2_5'] = 0;
					}
					ksort($consultas[$key]);
				}
			}
			if( $idioma == 'ENG' ){
				foreach($consultas_ramos as $key_ramo => $consulta){
					$consultas[$key_ramo]['name']    = $consulta->descripcion;
					$consultas[$key_ramo][$consulta->antiguedad]  = $consulta->cantidad;
				}
				
				foreach($consultas as $key => $consulta){
					if(!isset($consultas[$key]['between_0_1'])){
						$consultas[$key]['between_0_1'] = 0;
					}
					if(!isset($consultas[$key]['between_1_2'])){
						$consultas[$key]['between_1_2'] = 0;
					}
					if(!isset($consultas[$key]['between_2_5'])){
						$consultas[$key]['between_2_5'] = 0;
					}
					ksort($consultas[$key]);
				}
			}

		  }
		  if(!empty($marcas)){
			if($idioma == 'ESP'){
				foreach ($marcas as $key => $value) {
					unset($value->num_boletin);
					unset($value->directorio);
					unset($value->web);
					unset($value->fecha_publicacion);
					unset($value->encontrada);
				}

			} elseif($idioma == 'ENG'){
				foreach ($marcas as $key => $value) {
					$marcas[$key]->num_acta = $marcas[$key]->num_acta;
					$marcas[$key]->tipo = $marcas[$key]->tipo;
					$marcas[$key]->marca = $marcas[$key]->marca;
					$marcas[$key]->clase = $marcas[$key]->clase;
	
					unset($value->num_boletin);
					unset($value->directorio);
					unset($value->web);
					unset($value->fecha_publicacion);
					unset($value->encontrada);
				}
			}
		  }

		  if(!empty($seguros)){
			if($idioma == 'ESP'){
				foreach ($seguros as $key => $value) {
					unset($seguros[$key]->seg_codigo);
					unset($seguros[$key]->rie_codigo);
					unset($seguros[$key]->id_seguros);
					unset($seguros[$key]->id_padron);
					unset($seguros[$key]->visible);
					unset($seguros[$key]->estado);
				}
		
			} elseif($idioma == 'ENG'){
				foreach ($seguros as $key => $value) {
					$seguros[$key]->seg_nombre = $seguros[$key]->seg_nombre; 
					$seguros[$key]->rie_nombre = $seguros[$key]->rie_nombre; 
					unset($seguros[$key]->seg_codigo);
					unset($seguros[$key]->rie_codigo);
					unset($seguros[$key]->id_seguros);
					unset($seguros[$key]->id_padron);
					unset($seguros[$key]->visible);
					unset($seguros[$key]->estado);
				}		
			}
		  }

		  if( $idioma == 'ESP' ){
			$persona->comerciales->consultas  = $consultas;
			$persona->comerciales->seguros    = $seguros;
			$persona->comerciales->marcas = $marcas; 

		  } elseif( $idioma == 'ENG' ){
			$persona->commercial_data->qtyqueries = $consultas;
			$persona->commercial_data->insurances = $seguros;
			$persona->commercial_data->brands = $marcas;
		  }
		}
		//Información Fiscal.
		if($configuracion->contables == true){
		  $MainController = new MainController();
		  // $contables      = json_decode($MainController->obtenerContables(true,'','','','','','','','','','',$cuit)->getContent())->info;
		}

		if($configuracion->fiscales == true){
		  if( $idioma == 'ESP' ){
			$persona->fiscales = new stdClass();
		  } elseif( $idioma == 'ENG' ){
			$persona->fiscal_data = new stdClass();
		  }
		  $claes             = SQLConnection::backendStoreProcedure('obtener_clae', array($cuit));
		  $inscripciones     = SQLConnection::backendStoreProcedure('obtener_inscripciones', array($cuit));
		  $impuestos         = SQLConnection::backendStoreProcedure('obtener_padron_impuestos', array($id_padron));
		  $apocrifas         = SQLConnection::backendStoreProcedure('obtener_apocrifas', array($cuit));
		  $sircreb           = SQLConnection::backendStoreProcedure('obtener_sircreb', array($cuit));
		  $arba              = SQLConnection::backendStoreProcedure('obtener_arba', array($cuit));
		  $aportes           = SQLConnection::backendStoreProcedure('backend_mis_aportes', array($cuit, NULL, 12, 1), false);

		  if( $idioma == 'ESP' ){
			$persona->fiscales->aportes             = $aportes;
			$persona->fiscales->clae                = $claes;
			$persona->fiscales->inscripciones       = $inscripciones;
			$persona->fiscales->impuestos           = $impuestos;
			$persona->fiscales->facturas_apocrifas  = $apocrifas;
			$persona->fiscales->sircreb             = $sircreb;
			$persona->fiscales->arba                = $arba;
		  } elseif( $idioma == 'ENG' ){
			$persona->fiscal_data->social_security_contributions = $aportes;//AGB VER CON DATOS
			$persona->fiscal_data->economic_activity_code = $claes;
			foreach ($persona->fiscal_data->economic_activity_code as $key => $clae) { 
				$persona->fiscal_data->economic_activity_code[$key]->code = $clae->cod_clae;
				$persona->fiscal_data->economic_activity_code[$key]->description = $clae->descripcion;
				$persona->fiscal_data->economic_activity_code[$key]->start_date = $clae->fecha_inicio_actividad;
				unset($persona->fiscal_data->economic_activity_code[$key]->cod_clae);
				unset($persona->fiscal_data->economic_activity_code[$key]->descripcion);
				unset($persona->fiscal_data->economic_activity_code[$key]->fecha_inicio_actividad);
			}

			// FALTA TRADUCIR
			foreach ($inscripciones as $key => $value) {
				$inscripciones[$key]->fecha_contrato_social = $inscripciones[$key]->fecha_contrato_social;
				$inscripciones[$key]->numero_inscripcion = $inscripciones[$key]->numero_inscripcion;
				$inscripciones[$key]->fecha_inscripcion = $inscripciones[$key]->fecha_inscripcion;
				$inscripciones[$key]->monotributo = $inscripciones[$key]->monotributo;
				$inscripciones[$key]->inicio_actividad = $inscripciones[$key]->inicio_actividad;
				$inscripciones[$key]->empleador = $inscripciones[$key]->empleador;
			}
			$persona->fiscal_data->registered_taxes = $inscripciones;

			// FALTA TRADUCIR
			foreach ($impuestos as $key => $value) {
				$impuestos[$key]->codigo_impuesto = $impuestos[$key]->codigo_impuesto;
				$impuestos[$key]->nombre_impuesto = $impuestos[$key]->nombre_impuesto;
				$impuestos[$key]->fecha_inscripcion = $impuestos[$key]->fecha_inscripcion;
				$impuestos[$key]->estado = $impuestos[$key]->estado;
			}
			$persona->fiscal_data->taxes = $impuestos;

			$persona->fiscal_data->apocryphal_invoices = $apocrifas;
			$persona->fiscal_data->sircreb = $sircreb;
			$persona->fiscal_data->arba = $arba;
		  }
		}

		//informacion de bancos
		//if($configuracion->bancos == true){
		  $bancos = SQLConnection::backendStoreProcedure('backend_central_deudores', array($cuit,24,1));
		  $periodo =  SQLConnection::backendStoreProcedure('obtener_periodo_maximo', array($cuit),'selectOne');
		  if( $idioma == 'ESP' ){
			$persona->periodos = new stdClass(); 
			$persona->periodos->bancos = Misc::convertirFormatoFecha($periodo->periodo_maximo,'Y-m-d','Ym');
			$persona->bancos  = [];
			foreach ($bancos as $key => $value) {
			  
		      $persona->bancos[$key]  = new stdClass();
			  $persona->bancos[$key]->codigo_entidad  = $value->codigo_ent;
			  $persona->bancos[$key]->nombre_entidad  = $value->nombre;
			  $persona->bancos[$key]->periodo         = $value->fec_inf;
			  $persona->bancos[$key]->situacion       = $value->situacion;
			  $persona->bancos[$key]->monto           = $value->total;
			  $persona->bancos[$key]->dias_atraso     = $value->dia_atraso;
			}
		  } elseif( $idioma == 'ENG' ){
			$persona->max_bank_information = new stdClass(); 
			$persona->max_bank_information->period = Misc::convertirFormatoFecha($periodo->periodo_maximo,'Y-m-d','Ym');
			$persona->banks  = [];
			foreach ($bancos as $key => $value) {
			  $persona->banks[$key]  = new stdClass();
			  $persona->banks[$key]->bank_code = $value->codigo_ent;
			  $persona->banks[$key]->bank_name = $value->nombre;
			  $persona->banks[$key]->period = $value->fec_inf;
			  $persona->banks[$key]->status = $value->situacion;
			  $persona->banks[$key]->amount = $value->total;
			  $persona->banks[$key]->days_late = $value->dia_atraso;
			}
		  }
		//}
		if( $idioma == 'ESP' ){
			$persona->vinculados_segun_bcra = [];
		} elseif( $idioma == 'ENG' ){
			$persona->representatives_with_banking_system = [];
		}
		
		//informacion de cheques
		$cheques = SQLConnection::backendStoreProcedure('obtener_cheques', array($cuit));
		$i = 0;
		foreach ($cheques as $key => $value) {
			if($value->tipo == 'vinculaciones'){
				if( $idioma == 'ESP' ){
					$persona->vinculados_segun_bcra[$i] = new stdClass();
					$persona->vinculados_segun_bcra[$i]->nombre_persona_firmante     = $value->nombre_persona_firmante;
					$persona->vinculados_segun_bcra[$i]->cuit_firmante               = $value->cuit_firmante;
					$persona->vinculados_segun_bcra[$i]->nombre_persona_relacionado  = $value->nombre_persona_relacionado;
					$persona->vinculados_segun_bcra[$i]->Cuit_relacionado            = $value->Cuit_relacionado;
					$persona->vinculados_segun_bcra[$i]->cantidad_cheques_firmados   = $value->cantidad;
					$persona->vinculados_segun_bcra[$i]->cantidad_cheques_totales    = $value->total_cheques;
					unset($cheques[$i]);
					$i+=1;
				} elseif( $idioma == 'ENG' ){
					// FALTA TRADUCIR 
					$persona->representatives_with_banking_system[$i] = new stdClass();
					$persona->representatives_with_banking_system[$i]->nombre_persona_firmante     = $value->nombre_persona_firmante;
					$persona->representatives_with_banking_system[$i]->cuit_firmante               = $value->cuit_firmante;
					$persona->representatives_with_banking_system[$i]->nombre_persona_relacionado  = $value->nombre_persona_relacionado;
					$persona->representatives_with_banking_system[$i]->Cuit_relacionado            = $value->Cuit_relacionado;
					$persona->representatives_with_banking_system[$i]->cantidad_cheques_firmados   = $value->cantidad;
					$persona->representatives_with_banking_system[$i]->cantidad_cheques_totales    = $value->total_cheques;
					unset($cheques[$i]);
					$i+=1;
				}
			}else{
				unset($cheques[$key]->idp);
				unset($cheques[$key]->idppr);
				unset($cheques[$key]->cantidad);
				unset($cheques[$key]->total_cheques);
			}
		}
	   
		if( $idioma == 'ESP' ){
			$persona->cheques = $cheques;
		} elseif( $idioma == 'ENG' ){
			$persona->bounced_checks = $cheques;
		}

		$score = $respuesta->score;
		if( $idioma == 'ESP' ){
			if($configuracion->score_ic  == true){
				$persona->score = new stdClass();
				$persona->score->valor = $score;
			}
		} elseif( $idioma == 'ENG' ){
			if($configuracion->score_ic  == true){
				$persona->score = new stdClass();
				$persona->score->value = $score;
			}
		}

		if( $idioma == 'ESP' ){
			$persona->comex = new stdClass();
		} elseif( $idioma == 'ENG' ){
			$persona->comex = new stdClass();
		}
		$impo     =  SQLConnection::backendStoreProcedure('obtener_comex', array($cuit),'select');
		$pais     =  SQLConnection::backendStoreProcedure('obtener_comex_pais', array($cuit),'select');
		$rubros   =  SQLConnection::backendStoreProcedure('obtener_comex_rubros', array($cuit),'select');
		$totales  =  SQLConnection::backendStoreProcedure('obtener_comex_totales', array($cuit),'selectOne');
		if( $idioma == 'ESP' ){
			$persona->comex->importaciones = [];
			if(!empty($impo)){
			foreach ($impo as $key => $value) {
				$persona->comex->importaciones[$key] = new StdClass();
				$persona->comex->importaciones[$key]->fecha = $value->date;
				$persona->comex->importaciones[$key]->consumo = $value->consumo;
				$persona->comex->importaciones[$key]->deposito = $value->deposito;
				$persona->comex->importaciones[$key]->zonafranca = $value->zonafranca;
				$persona->comex->importaciones[$key]->temporal = $value->temporal;
				$persona->comex->importaciones[$key]->total = $value->total;
			}
			}
		} elseif( $idioma == 'ENG' ){
			// FALTA TRADUCIR 
			$persona->comex->imports = [];
			if(!empty($impo)){
			foreach ($impo as $key => $value) {
				$persona->comex->imports[$key] = new StdClass();
				$persona->comex->imports[$key]->fecha = $value->date;
				$persona->comex->imports[$key]->consumo = $value->consumo;
				$persona->comex->imports[$key]->deposito = $value->deposito;
				$persona->comex->imports[$key]->zonafranca = $value->zonafranca;
				$persona->comex->imports[$key]->temporal = $value->temporal;
				$persona->comex->imports[$key]->total = $value->total;
			}
			}
		}
		if(!empty($pais)){
		  foreach ($pais as $key => $value) {
		   $persona->comex->pais[$key] = new StdClass();
		   $persona->comex->pais[$key]->tipo_operacion  = $value->tipo_operacion;
		   $persona->comex->pais[$key]->fob             = $value->fob;
		   // $persona->comex->pais[$key]->nombre             = $value->nombre; // estaba en www2
		  }
		}
		if(!empty($rubros)){

		  foreach ($rubros as $key => $value) {
		   $persona->comex->rubros[$key] = new StdClass();
		   $persona->comex->rubros[$key]->tipo_operacion  = $value->tipo_operacion;
		   $persona->comex->rubros[$key]->descripcion     = $value->descripcion;
		   $persona->comex->rubros[$key]->fob             = $value->fob;
		   $persona->comex->rubros[$key]->posicion        = $value->posicion;
		  }
		}
		if(!empty($totales)){
			if( $idioma == 'ESP' ){
				$persona->comex->totales = new StdClass();
				$persona->comex->totales->total_impo  = $totales->total_impo;
				$persona->comex->totales->total_expo  = $totales->total_expo;
			}elseif( $idioma == 'ENG' ){
				$persona->comex->total = new StdClass();
				$persona->comex->total->total_imports  = $totales->total_impo;
				$persona->comex->total->total_exports  = $totales->total_expo;
			}
		}
		$actor      =  SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null,'A',$cuit,60,1),'select');
		$demandado  =  SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null,'D',$cuit,60,1),'select');
		if( $idioma == 'ESP' ){
			$persona->legales = new StdClass();
			$persona->legales->actor      = [];
			$persona->legales->demandado  = [];
			
			foreach ($actor as $key => $value) {
			$persona->legales->actor[$key] = new StdClass();
			$persona->legales->actor[$key]->fecha_causa   = $value->fecha_causa;
			$persona->legales->actor[$key]->nombre_causa  = $value->nombre_causa;
			$persona->legales->actor[$key]->cuit          = $value->cuit_otra_parte;
			$persona->legales->actor[$key]->nombre        = $value->nombre_padron_otra_parte;
			$persona->legales->actor[$key]->juzgado       = $value->juzgado;
			$persona->legales->actor[$key]->secretaria    = $value->secretaria;
			}
			
			foreach ($demandado as $key => $value) {
			$persona->legales->demandado[$key] = new StdClass();
			$persona->legales->demandado[$key]->fecha_causa   = $value->fecha_causa;
			$persona->legales->demandado[$key]->nombre_causa  = $value->nombre_causa;
			$persona->legales->demandado[$key]->cuit          = $value->cuit_otra_parte;
			$persona->legales->demandado[$key]->nombre        = $value->nombre_padron_otra_parte;
			$persona->legales->demandado[$key]->expediente    = $value->expediente;
			$persona->legales->demandado[$key]->juzgado       = $value->juzgado;
			$persona->legales->demandado[$key]->secretaria    = $value->secretaria;
			
			}

		} elseif( $idioma == 'ENG' ){
			$persona->legal = new StdClass();
			$persona->legal->plaintiff = [];
			$persona->legal->defendant = [];
			// FALTA TRADUCIR
			foreach ($actor as $key => $value) {
			$persona->legal->plaintiff[$key] = new StdClass();
			$persona->legal->plaintiff[$key]->fecha_causa   = $value->fecha_causa;
			$persona->legal->plaintiff[$key]->nombre_causa  = $value->nombre_causa;
			$persona->legal->plaintiff[$key]->cuit          = $value->cuit_otra_parte;
			$persona->legal->plaintiff[$key]->nombre        = $value->nombre_padron_otra_parte;
			$persona->legal->plaintiff[$key]->juzgado       = $value->juzgado;
			$persona->legal->plaintiff[$key]->secretaria    = $value->secretaria;
			}
			// FALTA TRADUCIR
			foreach ($demandado as $key => $value) {
			$persona->legal->defendant[$key] = new StdClass();
			$persona->legal->defendant[$key]->fecha_causa   = $value->fecha_causa;
			$persona->legal->defendant[$key]->nombre_causa  = $value->nombre_causa;
			$persona->legal->defendant[$key]->cuit          = $value->cuit_otra_parte;
			$persona->legal->defendant[$key]->nombre        = $value->nombre_padron_otra_parte;
			$persona->legal->defendant[$key]->expediente    = $value->expediente;
			$persona->legal->defendant[$key]->juzgado       = $value->juzgado;
			$persona->legal->defendant[$key]->secretaria    = $value->secretaria;
			
			}
			
		}
		return json_encode($persona);
  	}
	/* Informe Comercial Completo - fin */

	//IC XML (Monsanto por ahora).
	public static function obtenerICXML(){
		header('Content-Type: application/xml');
		$cuit     = Request::input('cuit');
		$apikey   = Request::input('apikey');
		$cliente  = Request::input('cliente') ?? 110864291 ;
		$response = '';
		$xml = new \SimpleXMLElement('<data/>');
		$busqueda = $xml->addChild('busqueda');
		$busqueda->addChild('cliente',$cliente);
		$busqueda->addChild('cuit',$cuit);
		$data = $xml->addChild('response');
		self::$revisar_monsanto = true;
		$resp = self::obtenerServicioScore($cuit,true,false);
		$data->addChild('html',self::ICSinGraficos());
		$data->addChild('rechazo',self::$monsanto);
		return $xml->asXML();
	}

    //-- VERSION ACTUALIZADA, APLICADA EN PRODUCCION. LA ANTERIOR 'obtenerICXML()' NO VA MAS, NO SE ELIMNINA PARA TENERLA DE REFERENCIA.
	public static function obtenerICXML2(){
		$nn = self::ICSinGraficos();
		//echo("ok 1"); die();
		header('Content-Type: application/xml');
		$cuit     = Request::input('cuit');
		$apikey   = Request::input('apikey');
		$cliente  = Request::input('cliente') ?? 110864291 ;
		$response = '';
		//echo("ok 2"); die();
		$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes"?><data/>');
		$busqueda = $xml->addChild('busqueda');
		$busqueda->addChild('cliente',$cliente);
		$busqueda->addChild('cuit',$cuit);
		$data = $xml->addChild('response');
		self::$revisar_monsanto = true;
		//echo("ok 3"); die();
		$resp = self::obtenerServicioScore($cuit,true,false);
		
		//echo(var_dump($resp)); die();
		//$data->addChild('html',self::ICSinGraficos());
		$data->addChild('html',$nn);
		$data->addChild('rechazo',self::$monsanto);
		//echo(var_dump($xml->asXML()));
		return $xml->asXML();
	}

	//obtiene la constancia de inscripcion, primero la busca en afip y luego la devuelve.
	public static function obtenerConstanciaPDF(){
		$cuit  = Request::input('cuit');
		AFIPController::obtenerConstanciaPDF($cuit);
		return MainController::obtenerConstanciaPDF(true);
	}
  
	public static function obtenerVistaCompacto(){
			$respuesta = Self::obtenerSesion();
			$secciones_sabana = $respuesta['secciones'];
			$version_sabana =1;
			$num_comentarios =0;
			$monitoreo =0;
			$token = '';
			return View('Api/compacto_header')->with(compact('version_sabana','token','secciones_sabana','num_comentarios','monitoreo'))->render();
	}
	public static function obtenerFooterHTML(){
		$download = false;
		return View('Api/compacto_footer')->with(compact('download'))->render();
	}

	public static function obtenerBriefHTML($json = true){
		$incluye_balance  = Request::input('incluye_balance') ?? 0;
		$cliente_login  = Request::input('cliente_login') ?? null;
		return self::$MainController->obtenerBrief($json,'','','','','',$incluye_balance,$cliente_login);
	}
	public static function obtenerSociedadesHTML($json = true){
		return self::$MainController->obtenerSociedades($json);
	}
	public static function obtenerFormalesHTML($json = true){
		return self::$MainController->obtenerFormales($json);
	}
	public static function obtenerComercialesHTML($json = true){
		return self::$MainController->obtenerComerciales($json);
	}
	public static function obtenerFiscalesHTML($json = true){
		return self::$MainController->obtenerFiscales($json);
	}
	public static function obtenerBancosHTML($json = true){
		return self::$MainController->obtenerBancos($json);
	}
	public static function obtenerContablesHTML($json = true){
		return self::$MainController->obtenerContables($json);
	}
	public static function obtenerLegalesHTML($json = true){
		return self::$MainController->obtenerLegales($json);
	}
	public static function ICSinGraficos(){
		$respuesta = self::obtenerVistaCompacto();
		$respuesta .= self::obtenerFormalesHTML(false);
		$respuesta .= self::obtenerComercialesHTML(false);
		$respuesta .= self::obtenerContablesHTML(false);
		$respuesta .= self::obtenerFiscalesHTML(false);
		$respuesta .= self::obtenerSociedadesHTML(false);
		$respuesta .= self::obtenerLegalesHTML(false);
		$respuesta .= self::obtenerBancosHTML(false);
		$respuesta .= self::obtenerFooterHTML(false);
		return $respuesta;
	}
	//devuelve todos las novedades del campo smart alert true para un cliente especifico.
	public static function obtenerSmartAlert(){
		header('Content-Type: application/xml');
		$apikey   = Request::input('apikey');
		$ip       = $_SERVER['REMOTE_ADDR'];
		$url      = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
		$usuario  = Session::get('usuario');
		$user_id  = $usuario->user_id;
		$pedido   = date('Y-m-d h:i:s');
		// 1299789112,'2018-11-28'
		$date = new DateTime(date('Y-m-d')); // For today/now, don't pass an arg.
		$date->modify("-1 day");
		$cliente  = Request::input('cliente') ?? 110864291 ;
		$fecha    = $date->format("Y-m-d");
		$smart_alert = SQLConnection::backendStoreProcedure('api_smart_alert',array($cliente),'select');
		$actualizar_smart_alert = SQLConnection::backendStoreProcedure('api_actualizar_smart_alert',array($cliente),'select');
		$xml = new \SimpleXMLElement('<data/>');
		$busqueda = $xml->addChild('busqueda');
		$busqueda->addChild('cliente',$cliente);
		$busqueda->addChild('fecha',$fecha);
		foreach ($smart_alert as $key=>$value) {
		$data = $xml->addChild('persona');
		$data->addChild('dni_cuit', $value->dni_cuit);
		$data->addChild('categoria', $value->categoria);
		$data->addChild('explicacion', $value->explicacion);
		}


		SQLConnection::backendStoreProcedure('insertar_api_log',array($apikey,'00000000000',$user_id,$pedido,$ip,$url));

		return $xml->asXML();
	}

	public static function certificadosFiscalesAFIP(){
	// $cuit = Request::input('cuit');
		$cuits = SQLConnection::backendStoreProcedure('obtener_certificado_fiscal',array(),'select');
			foreach($cuits as $value){
			$cuit = $value->identificacion;
			$curl = curl_init();
			curl_setopt_array($curl, array(
				CURLOPT_URL => "https://serviciosweb.afip.gob.ar/genericos/rg1814/Consulta.aspx/ListarCertificados",
				CURLOPT_RETURNTRANSFER => true,
				CURLOPT_ENCODING => "",
				CURLOPT_MAXREDIRS => 10,
				CURLOPT_TIMEOUT => 30,
				CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
				CURLOPT_CUSTOMREQUEST => "POST",
				CURLOPT_POSTFIELDS => "{\"cuit\":\"$cuit\"}",
				CURLOPT_SSL_CIPHER_LIST => 'DEFAULT@SECLEVEL=2',
				CURLOPT_HTTPHEADER => array(
				"accept: */*",
				"accept-encoding: gzip, deflate, br",
				"accept-language: es-ES,es;q=0.9",
				"cache-control: no-cache",
				"connection: keep-alive",
				"content-length: 22",
				"content-type: application/json; charset=UTF-8",
				"host: serviciosweb.afip.gob.ar",
				"origin: https://serviciosweb.afip.gob.ar",
				"pragma: no-cache",
				"referer: https://serviciosweb.afip.gob.ar/genericos/rg1814/consulta.aspx",
				"user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36",
				"x-requested-with: XMLHttpRequest"
				),
			));
		$response = curl_exec($curl);
		$err = curl_error($curl);
		curl_close($curl);
		$respuesta = json_decode($response);
		if(!empty($respuesta->d)){
			foreach ($respuesta->d as $key => $value) {
			$resolucion       = $value->__type;
			$nro_certificado  = $value->nro;
			$identificacion   = $value->cuit;
			$razon_social     = $value->RazonSocial;
			$cer_nro          = $value->CerNro;
			$fecha_creacion   = $value->s_Fecha;
			$fecha_hasta      = $value->s_VigenciaHasta;
			$fecha_creacion =  implode("-", array_reverse(explode("/", $fecha_creacion)));
			$fecha_hasta =  implode("-", array_reverse(explode("/", $fecha_hasta)));
			if($identificacion == null){
				continue;
			}
			$resp = SQLConnection::backendStoreProcedure('insertar_certificado_fiscal',array($resolucion,$nro_certificado,$identificacion,$razon_social,$cer_nro,$fecha_creacion,$fecha_hasta),'selectOne');
			}
		}
		SQLConnection::backendStoreProcedure('procesar_certificado_fiscal',array($cuit),'selectOne');
		usleep(250000);
		}
	}
	//calcula el score sin tomar en cuenta el balance.
	public static function calcularScoreSinBalance(){
		$cuit  = Request::input('cuit');
		return self::obtenerServicioScore($cuit,false);
	}

	/*calcula el score del balance, con el segundo parámetro permite calcular sólo el score sobre balances sin tomar en cuenta
	las otras secciones*/
	public static function calcularScoreBalance($respuesta=[],$calcula_solo_sobre_balances=true,$porcentaje=100){
		$cuit         = Request::input('cuit');
		$id_balance   = Request::input('id_balance');
		if(isset($id_balance) && $id_balance > 0){
		$cuit = null;
		}
		$score_contables = SQLConnection::backendStoreProcedure('obtener_score_contable_full',array($cuit,$id_balance),'selectOne');
		
		self::$score_contables = $score_contables;
		if(isset($score_contables->fecha_balance) && !empty($score_contables->fecha_balance)){
		if($calcula_solo_sobre_balances == true){
			$porcentaje = 100;
		}
		$respuesta          = self::calcularScoreContable($respuesta,$score_contables,$porcentaje);
		}
		if($calcula_solo_sobre_balances == true ){
		$respuesta['antiguedad_balance'] = Misc::calcularDiferenciaEnMeses(Misc::convertirFormatoFecha($score_contables->fecha_balance),date('Y-m-d'));
		}
		if($respuesta){
		$respuesta['indices'] = $score_contables;
		}
		return $respuesta;
	}

	public static function calcularScoreBalance_v2(){
		$usuario        = Session::get('usuario');
		if($usuario->producto == env('NRO_PRODUCTO_BALANCE')) {
			try {
				$respuesta=[];
				$calcula_solo_sobre_balances=true;
				$porcentaje=100;
				$expRegCuit = '/^[0-9]{11}$/';
				$expRegBalance = '/^[0-9]{1,3}$/';
				
				if (isset($_POST['cuit']) && preg_match($expRegCuit,$_POST['cuit'])){
					$cuit = $_POST['cuit'];
				}
				else{
					return json_encode([ 'notificacion' => 'Error en el formato de cuit']);
				}
				if (isset($_POST['id_balance']) && preg_match($expRegBalance,$_POST['id_balance'])){
					$id_balance = $_POST['id_balance'];
				}
				else {
					$id_balance = null;
				}
				
				$id_consumo = self::consumir_servicio($cuit,env('NRO_PRODUCTO_BALANCE'));
				$score_contables = SQLConnection::backendStoreProcedure('obtener_score_contable_full',array($cuit,$id_balance),'selectOne');
				
				self::$score_contables = $score_contables;
				
				if(isset($score_contables->fecha_balance) && !empty($score_contables->fecha_balance)){
					if($calcula_solo_sobre_balances == true){
						$porcentaje = 100;
					}
					$respuesta          = self::calcularScoreContable_v2($respuesta,$score_contables,$porcentaje);
				}
				if($calcula_solo_sobre_balances == true ){
					$respuesta['antiguedad_balance'] = Misc::calcularDiferenciaEnMeses(Misc::convertirFormatoFecha($score_contables->fecha_balance),date('Y-m-d'));
				}
				if($respuesta){
					$respuesta['indices'] = $score_contables;
				}
				return json_encode([$score_contables, 'Transaction_id'=>$id_consumo->transaction_id]);
			} catch (\Throwable $th) {
				return json_encode(['notificacion' => 'No se encuentra información para el tax_id: '.$cuit, 'Transaction_id'=>$id_consumo->transaction_id]);
			}  
		}
		else {
			return json_encode(['Response'=>'No posee acceso al producto.']);
		}
	}

	/*Servicios Internos Inicio*/
	//Servicio que obtiene el Score en test NO va a AFIP. En test SERVICIOS_AFIP = false
	public static function obtenerServicioScore($cuit='',$calcular_balance=true,$constancia_afip=true){
		if(!$cuit){
		$cuit  = Request::input('cuit');
		}
		$numero_cliente  = Request::input('cliente');
		MainController::verificarMongo($cuit);
		$user_id = 0;
		//$p_fisica = (substr($cuit,0,1) == 3) ? false : true;
		$fisica_juridica = Misc::tipoPersona($cuit); 
		$p_fisica = ($fisica_juridica == 'F') ? true : false;
		$resp_constancia = [];
		//Si afip es true pasa por afip. 
		if(ENV('SERVICIOS_AFIP') == true){
			SQLConnection::busquedaPadron($cuit,1);
			AFIPController::obtenerPadron($cuit,false,'AR',$constancia_afip);
			$resp_constancia = AFIPController::obtenerConstanciaPDF($cuit);
		}else {
			
			$resp_constancia['response'] = 'constancia deshabilitado';
			$resp_constancia['constancia_error'] = false;
			// Si es persona fisica y no tenemos ni año ni fecha de nacimiento, y no se la puede completar con el padron electoral, entonces SI va a afip
			if ($p_fisica) { 
				$tiene_nac = SQLConnection::obtenerTieneNacimiento($cuit);
				if(isset($tiene_nac->tiene_nacimiento) && $tiene_nac->tiene_nacimiento == 0){
				$actualiza = SQLConnection::actualizarDatosConPadron($cuit,$user_id);
				if (!isset($actualiza->respuesta) || $actualiza->respuesta != 'ok')
				{
					SQLConnection::busquedaPadron($cuit,1);
					AFIPController::obtenerPadron($cuit,false,'AR',$constancia_afip);
				}
				}
			}
		}

		if(self::$revisar_monsanto == true){
			$resp           = SQLConnection::backendStoreProcedure('obtener_contraparte_cuit',array($cuit,110864291),'selectOne');
			$contraparte    = $resp->contraparte;
			$resp           = SQLConnection::backendStoreProcedure('LN_panel_control_excel',array(110864291,$contraparte),'selectOne');
			if(isset($resp->detalle_killer) && $resp->detalle_killer != ''){
			self::$monsanto = 'Rechazo por '.$resp->detalle_killer;
			}
		}
  		/* Si está fallecido o Sintomas de vitalidad = 0 o no es argentino, el score da cero */
		$defuncion      = SQLConnection::obtenerDefuncion($cuit);
		if(isset($defuncion->fecha_deceso)){
			self::$monsanto = 'Rechazo por defunción';
			return json_encode(['score'=>0,'debug_score'=>'Fecha Deceso','resp_constancia' => $resp_constancia]);
		}
	  	$vitalidad =  SQLConnection::obtenerSintomasDeVitalidad($cuit);
		if(isset($vitalidad->vitalidad) && $vitalidad->vitalidad == 0){
			return json_encode(['score'=>0,'debug_score'=>'Sintomas de Vitalidad','resp_constancia' => $resp_constancia]);
		}
	  	$nacionalidad = Misc::nacionalidad($cuit); 
		if ($nacionalidad !== 'AR') {
			return json_encode(['score'=>0,'debug_score'=>'No es argentino','resp_constancia' => $resp_constancia]);
		}
	 	 //

		/* */

		$debug_score = '';
		// Obtener Bancos para calcular si amerita por situación uno y sumar al score
		// Se almacenan en variable de clase para ser reutilizadas en la pestaña de bancos
		$obtener_bancos = SQLConnection::obtenerBancos($cuit);
		$situacion_1    = Misc::ameritaPorSituacionUno($obtener_bancos);
		self::$amerita_situacion_1 = $situacion_1['amerita'];
		self::$cantidad_situacion_1 = $situacion_1['cantidad'];

		$tabla_score    = SQLConnection::obtenerTablaScore();

		$tabla_score_ordenada     = [];
		$score_ordenado = []; 
		/*var_dump($cuit); 
		var_dump($p_fisica); 
		die(); */
		foreach($tabla_score as $score){
		$score->cantidad = 0;
		$tabla_score_ordenada[$score->id_grupo][$score->codigo][] = $score;
		}
		$tabla_score_con_cantidades = $tabla_score_ordenada;
		$array_score_general    = SQLConnection::obtenerScore($cuit,$p_fisica);
		$score_fiscales         = SQLConnection::obtenerScoreFiscales($cuit,$p_fisica);
		$score = 70;
		foreach($array_score_general as $score_general){
			if($score_general->grupo ==2){
			$score_ordenado[$score_general->grupo][$score_general->codigo][$score_general->fecha][] = $score_general;
			}else{
			$score_ordenado[$score_general->grupo][$score_general->codigo][] = $score_general;
			}
		}
		$porcentaje_por_grupo       = SQLConnection::obtenerPorcentajePorGrupo($cuit);
		self::$porcentaje_por_grupo_afectado_por_preferencias = clone $porcentaje_por_grupo;
		$afectacion_score           = SQLConnection::obtenerPorcentajeScorePorAfectacion();
		
		$afectacion_score_ordenada  = [];
		foreach($afectacion_score as $key => $value){
		$afectacion_score_ordenada[$value->afecta_directo] = $value;
		}
		$link_pdf = env('HOST_NAS').'/'.substr($cuit, 0, 2).'/'.substr($cuit, 2, 3).'/'.substr($cuit, 5, 3).'/'.$cuit.'.pdf';
		self::$tiene_pdf = file_exists($link_pdf);
		$card_fiscales = '';
		if($p_fisica){
		$card_fiscales = SQLConnection::obtenerCardFiscalesPF($cuit);
		}else{
		$card_fiscales = SQLConnection::obtenerCardFiscales($cuit);
		}
		if (!self::$tiene_pdf && sizeof(array($card_fiscales)) == 0){
		self::$observado = true;
		}

		if($calcular_balance == true){
		$score_contables        = SQLConnection::obtenerScoreContable($cuit);
		self::$score_contables = $score_contables;
		}
		if($calcular_balance == true && isset (self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ){
		$score = 65.8;
		}
	

		if(!$p_fisica){
		$respuesta          = self::calcularScorePersonaJuridica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$afectacion_score_ordenada,$numero_cliente);
		}else{
		self::$cuit = $cuit;
		self::$edad     = Misc::obtenerEdadPersonaFisica($cuit);
		if (self::$edad >= 18 || self::$edad == null) {
					$respuesta          = self::calcularScorePersonaFisica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$afectacion_score_ordenada,$numero_cliente);
					$menor_de_edad = false;
		} else {
			$respuesta['score']                      = 0;
			$respuesta['afecta_directo']             = [];
			$respuesta['afecta_directo']['total']    = 0;
			$respuesta['afecta_directo']['debug']    = '';
			$respuesta['afecta_indirecto']           = [];
			$respuesta['afecta_indirecto']['debug']  = '';
			$menor_de_edad = true;
		}
		}
		if($calcular_balance == true && isset (self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ){
		$respuesta = self::calcularScoreBalance($respuesta,false,self::$porcentaje_por_grupo_afectado_por_preferencias->contable);
		}
		$respuesta = self::calcularScoreAportes($respuesta);

			if(is_array($respuesta['afecta_indirecto']['debug'])) {
			array_push($respuesta['afecta_indirecto']['debug'],"------------------------------------------------------------");
			array_push($respuesta['afecta_indirecto']['debug'],"Máximo Judicial Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->judicial);
			array_push($respuesta['afecta_indirecto']['debug'],"Máximo Cheques Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->cheques);
			array_push($respuesta['afecta_indirecto']['debug'],"Máximo Cendeu Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->cendeu);
			array_push($respuesta['afecta_indirecto']['debug'],"Máximo Fiscal Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->fiscal);
			array_push($respuesta['afecta_indirecto']['debug'],"Máximo Formal Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->formal);
			array_push($respuesta['afecta_indirecto']['debug'],"Máximo Contable Indirecto: ". (isset(self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ?  self::$porcentaje_por_grupo_afectado_por_preferencias->contable : 0));
			}
		$score = $respuesta["score"];
		if(isset($respuesta['afecta_directo']['debug']) && $respuesta['afecta_directo']['debug'] != ''){
		$debug_score = "Afectaciones Directas";
		$debug_score .= "<br> Monsanto: ".self::$monsanto."<br>";
		$debug_score .= "<br>";
		//echo(var_dump(array($respuesta['afecta_directo']['debug'])));die();
		//$debug_score .= implode('<br>',$respuesta['afecta_directo']['debug']);
		$debug_score .= implode('<br>',array($respuesta['afecta_directo']['debug']));
		$debug_score .= "<br>";
		}
		if(isset($respuesta['afecta_indirecto']['debug'])  && $respuesta['afecta_indirecto']['debug'] != '') {
		$debug_score .= "Afectaciones Indirectas";
		$debug_score .= "<br>";
		$debug_score .= implode('<br>',array($respuesta['afecta_indirecto']['debug']));
		}

		$score = number_format($score,1);
		$score = ($score >= 100) ? 100 : $score;
		$score =  ($score < 0) ? 0 : $score;
		if($score == 100){ $score = 98;}
		//return $debug_score;
		return json_encode(['score'=>$score,'debug_score'=>$debug_score,'resp_constancia' => $resp_constancia]);
	
	}
  	/*Servicios Internos Fin*/

	public static function obtenerInfoCuitAmpliada(){
		$cuit  = Request::input('cuit');
		if(!isset($cuit)){
		return  json_encode(['error'=> true,'error_message'=>'El parámetro cuit debe poseer 11 caracteres.']);
		}

		if(strlen($cuit) != 11){
		return  json_encode(['error'=> true,'error_message'=>'El cuit contiene un largo diferente de 11.']);

		}
		if($cuit){
		AFIPController::obtenerPadron($cuit,true,'AR',false);
		}
		$persona = SQLConnection::backendStoreProcedure('api_info_formal_cuit',array($cuit),'selectOne');
		$domicilios       = SQLConnection::backendStoreProcedure('api_info_domicilios_cuit',array($cuit));
		$telefonos        = SQLConnection::backendStoreProcedure('api_info_telefonos_cuit',array($cuit));

		$persona->domicilios[] = $domicilios;
		$persona->telefonos[]  = $telefonos;
		$usuario        = Session::get('usuario');
		$user_id        = $usuario->user_id;

		//$p_ip = $_SERVER['REMOTE_ADDR'];
		$producto       = $usuario->producto ?? 37;
		self::consumir_servicio($cuit,$producto);
		//SQLConnection::consumirServicio($user_id,$cuit,37);

		return json_encode($persona);
	}

/* 
-------------------- 
Nueva API para EBANX 
-------------------- 

El cliente solicita tener un nuevo servicio que permita obtener cierta información asociada a un CUIT/DNI y un Nombre.
El servicio deberá devolver los siguientes datos: 
CUIT, Nombre, 
Fecha de Nacimiento, Fecha de Defunción y Responsable Inscripto (Si/No)
Dirección (todas las direcciones que tengamos registradas), 
De la Dirección, solicita los siguientes datos: Tipo de domicilio, Domicilio, Localidad, Código Postal y Provincia.

El servicio puede recibir un CUIT o un DNI, y un Nombre. Ambos campos son obligatorios
Buscar el/los CUITs asociados al dato recibido
Con el/los CUITs encontrados, actualizar los datos utilizando el servicio de AFIP
Validar el nombre recibido con el nombre que tengamos en la base de datos
Recabar el resto de los datos para aquellas validaciones que dieron como resultado 1. 
SÓLO si todas las validaciones dieron como resultado 0, recabar el resto de los datos para el/los CUITs

*/ 
/*
19/07/2021 antes se hacía un top 1 en el SP, para que solo devuelva un registro en caso de encontrar más de 1.
Ahora devuelve todos los encontrados
*/
  public static function obtenerInfoDniCuitAmpliada()
  {
	$cuit  = Request::input('cuit');
	$nombre = trim(Request::input('nombre'));
	$nombre_contains= '';
	if($nombre)
	{
	  $nombre_contains= Misc::parsearBusquedaPadron($nombre);
	}
	$usuario        = Session::get('usuario');
	$user_id        = $usuario->user_id;
	$respuesta = new stdClass();
	if(isset($cuit[0]) && $cuit[0] != '2' && strlen($cuit) == 11)
	{

	  $usuario    	= Session::get('usuario');
	  $producto       = $usuario->producto ?? 40;
		self::consumir_servicio($cuit,$producto);
	  //SQLConnection::consumirServicio($user_id,$cuit,40);

	  $respuesta->identificacion_buscada=$cuit;
	  $respuesta->nombre_buscado=$nombre;
	  $respuesta->fecha = date("Y-m-d h:i:s");
	  $respuesta->codigo_error = 5;
	  $respuesta->mensaje_error='El cuit es inválido ó no pertenece a una persona humana';
	  $respuesta->fidelitas_response = [];
	  return json_encode($respuesta);
	}
	$validacion = SQLConnection::backendStoreProcedure('api_validacion_dni_cuit',array($cuit,$nombre,$nombre_contains),false);
	if(!empty($validacion)){
	  foreach ($validacion as $key => $value) {

		  $usuario    	= Session::get('usuario');
			$producto     = $usuario->producto ?? 40;
			//SQLConnection::consumirServicio($user_id,$cuit,40);

		  $respuesta->identificacion_buscada=$cuit;
		  $respuesta->nombre_buscado=$nombre;
		  $respuesta->fecha = date("Y-m-d h:i:s");

		  if ($value->error > 0)
		  {
			$respuesta->codigo_error =$value->error;
			$respuesta->mensaje_error=$value->mensaje_error;
			$respuesta->fidelitas_response = [];
			$usuario        = Session::get('usuario');
			$user_id        = $usuario->user_id;
			self::consumir_servicio($cuit,$producto);
			return json_encode($respuesta);
		  }

		  if ($key==0)
		  {
			$respuesta->codigo_error = $value->error;
			$respuesta->mensaje_error= $value->mensaje_error;
			$respuesta->fidelitas_response = [];
		  }
		  
		  $respuesta->fidelitas_response[$key]['mensaje']         = $value->mensaje_validacion;
		  $respuesta->fidelitas_response[$key]['validacion']      = $value->validacion;
		  $respuesta->fidelitas_response[$key]['nombre_correcto'] = trim($value->nombre_correcto);
		  $respuesta->fidelitas_response[$key]['cuit_buscado']    = trim($value->cuit_buscado);

		   //AFIPController::ontenerPadronA4($value->cuit_buscado); 
		  $resp = []; 
		  $resp = AFIPController::obtenerPadron($value->cuit_buscado,false,'AR',false);
	  	  
		 // AGB VER ESTE SLEEP BORRACHO
		  //usleep(500000);
		  $afip = SQLConnection::backendStoreProcedure('api_info_afip_cuit',array($value->cuit_buscado),true);
		  //if (!empty($resp)) {
/* RENAPER */
		  /* 23/07/2021: Si no tenemos la fecha de nacimiento en la BD (el campo buscar_fecha_nac viene con valor 1)
		  				 entonces, buscamos en Renaper */
		  if ($afip->buscar_fecha_nac == 1 || $afip->buscar_fecha_nac == '1')
		  {
		  	if ($afip->sexo == null) 
		  	{
				$renaper = json_decode(RenaperController::obtenerUltimoEjemplarUno($afip->dni, 'M',1)); 
				if (!isset($renaper->Response->fechaNacimiento)) 
				{ $renaper = json_decode(RenaperController::obtenerUltimoEjemplarUno($afip->dni,'F',1)); }
			}
			else 
			{
				$renaper = json_decode(RenaperController::obtenerUltimoEjemplarUno($afip->dni, $afip->sexo,1)); 
			}
		  }
/* FIN RENAPER */
		  //}

		  $respuesta->fidelitas_response[$key]['afip'] = new stdClass(); 
		  /* 23/07/2021: El sp api_info_afip_cuit devuelve mas datos, entonces tomamos solo los campos que necesitamos */
		  //$respuesta->fidelitas_response[$key]['afip'] = $afip;
		  $respuesta->fidelitas_response[$key]['afip']->responsable_inscripto	= $afip->responsable_inscripto; 
		  $respuesta->fidelitas_response[$key]['afip']->monotributo				= $afip->monotributo;
		  $respuesta->fidelitas_response[$key]['afip']->fecha_nacimiento		= $afip->fecha_nacimiento;
		  $respuesta->fidelitas_response[$key]['afip']->persona_fallecida		= $afip->persona_fallecida;

		  $domicilios = SQLConnection::backendStoreProcedure('api_info_domicilios_cuit',array($value->cuit_buscado),false);
		  //$respuesta->fidelitas_response[$key]['domicilios']= $domicilios;  
 	  	  /* 22/04/2021: Se pidio que solo devuelva un domicilio (prefenrentemente el fiscal) */
		  if (sizeof($domicilios) > 0 ) 
		  { 
		  	  $domiclio_fiscal = $domicilios[0]; 
			  foreach ($domicilios as $dom)
			  {
			  	if ($dom->tipo_de_domicilio == 'Fiscal') { $domiclio_fiscal = $dom; }
			  }
			  $respuesta->fidelitas_response[$key]['domicilios'] = $domiclio_fiscal; 
		  }

		  $usuario    	= Session::get('usuario');
		  $producto       = $usuario->producto ?? 40;
			self::consumir_servicio($value->cuit_buscado,$producto);
		  //SQLConnection::consumirServicio($user_id,$value->cuit_buscado,40);
	  }
	}
	else
	{

		$usuario    	= Session::get('usuario');
		$producto       = $usuario->producto ?? 40;
		self::consumir_servicio($cuit,$producto);
		//SQLConnection::consumirServicio($user_id,$cuit,40);

		$respuesta->identificacion_buscada=$cuit;
		$respuesta->nombre_buscado=$nombre;
		$respuesta->fecha = date("Y-m-d h:i:s");
		$respuesta->codigo_error = 5;
		$respuesta->mensaje_error='Error en la consulta realizada';
		$respuesta->fidelitas_response = [];
		return json_encode($respuesta);
	}
	
	//print_r(json_encode($respuesta));die();

	return json_encode($respuesta);
  }
/* -------------------- */ 


	public static function actualizarAFIP(){
		$identificacion = Request::input('identificacion');
		if($identificacion){
		return AFIPController::obtenerPadron($identificacion,false,'AR',false);
		}
	}

	//obtiene el monitoreo del servicio y lo avisa por mail ( por ahora sólo AFIP A4 )
	//modificado el 29/8 ahora se agrega el A5
	public static function obtenerMonitoreoServicios(){
		$respuesta['A4'] = self::getUrl(ENV('AFIP_URL_PADRON_A4'));
		$respuesta['A5'] = self::getUrl(ENV('AFIP_URL_PADRON_A5'));
		$content = '';
		foreach($respuesta as $key => $value){
		if($value['headers'][0] != 'HTTP/1.1 200 OK'){
			$content .= "el Servicio $key ". $value['headers'][0] . ' el '. date('d/n/Y h:i:s')."\r\n"."<br>";
			SQLConnection::backendStoreProcedure('actualizar_estado_servicio_afip',array('obtenerWSPadron'.$key,0),true);
		}else{
			$content .= "el Servicio $key ". $value['headers'][0] . ' el '. date('d/n/Y h:i:s')."\r\n"."<br>";
			SQLConnection::backendStoreProcedure('actualizar_estado_servicio_afip',array('obtenerWSPadron'.$key,1),true);
		}

		}
		echo Misc::enviarMail('mails/servicios/caido','soporte$fidelitas.com.ar',$content,'Monitoreo de Servicios',false);
		
	}

	//obtiene la URL,devuelve separado header y content en un array.
	private static function getUrl($url) {
		$content = $file_get_contents($url);
		// you can add some code to extract/parse response number from first header. 
		// For example from "HTTP/1.1 200 OK" string.
		return array(
				'headers' => $http_response_header,
				'content' => $content
			);
	}


	//Nivel SocioEconómico

	public static function obtenerNivelSocioEconomico(){
		$cuit           = Request::input('cuit');
		$tipo_persona   = (substr($cuit,0,1) != '3') ? 'f' : 'j';
		/* 22/07/2021 Agregamos que pase por afip */
		if(!empty($cuit) && strlen($cuit) == 11){
			AFIPController::obtenerPadron($cuit,true,'AR',false);
		}

		$nivel_socioeconomico = new \stdClass();
		// self::obtenerCuitsNivelSE(); // no estaba en www y si en www2, pero obtenerCuitsNivelSE() no funciona porque no funciona el SP obtener_nivel_socioeconomico_dev

		//$nivel_socioeconomico->respuesta_minima = new \stdClass();
		if(!isset($cuit)){
		return  json_encode(['error'=> true,'error_message'=>'El parámetro cuit debe poseer 11 caracteres.']);
		}

		if(strlen($cuit) != 11){
		return  json_encode(['error'=> true,'error_message'=>'El cuit contiene un largo diferente de 11.']);

		}
		
		//$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021',array($cuit,$tipo_persona),true);
		/* 04/05/2021: Si el score es N/A para personas fisicas, el nivel socioeconomico = N/A */
		$respuesta  = json_decode(self::obtenerServicioScore($cuit,true,false));
		$score      = $respuesta->score;
		if (strtoupper($tipo_persona) == 'F' && $score == 0)
		{
			$nivel = new \StdClass();
			$nivel->rango_minimo = '0';
			$nivel->rango_maximo = '0';
		}
		else 
		{
			$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021',array($cuit,$tipo_persona),true);
		} 

		if(isset($nivel->rango_minimo)){
		//  $nivel_socioeconomico->respuesta_minima->rango_minimo = $nivel->rango_minimo;
		}
		if(isset($nivel->rango_maximo)){
		//  $nivel_socioeconomico->respuesta_minima->rango_maximo = $nivel->rango_maximo;
		}
		//$nivel_socioeconomico->respuesta_completa = $nivel;
		return json_encode($nivel);
	}

	public static function obtenerCuitsNivelSE (){
		$cuits = DB::table('procesos_nivel_socio_economico_respuesta')->select(DB::raw('cuit'))->get();
		foreach($cuits as $value){
		$tipo_persona = 'J';
		$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_dev',array($value->cuit,$tipo_persona),true);
		$es_cliente = ($nivel->cliente>0) ? true:false;
		$incluir = ($nivel->rango_maximo > 0) ? true : false;
		$nivel= SQLConnection::backendStoreProcedure('actualizar_nivel_socio_economico_incluir',array($value->cuit,$incluir));

		}
	}


	public static function obtenerBuscadorCompleto($cuit='',$nombre='',$user_id=''){
		if(!$cuit){
			$cuit      = trim(Request::input('cuit'));
		}
		if(!$nombre){
			$nombre    = trim(Request::input('name'));
		} 
		if(!$user_id){
			$user_id    = trim(Request::input('user_id'));
		}
		$nombre = str_replace("'", "", $nombre);
		$nombre = str_replace('"', '', $nombre);
		$nombre_buscado = $nombre;
		
		$max_rows = 50;
		$respuesta = [];

		if(!$cuit && !$nombre){
			$message = ['error'=> true,'error_message'=>'Se debe envíar almenos 1 cuit o nombre para comenzar la búsqueda.'];
			return json_encode($message);
		}
		
		//obtenerAFIP.
		if(!empty($cuit) && strlen($cuit) == 11){
			AFIPController::obtenerPadron($cuit,true,'AR',false);
		}

		//CREDITSAFE.
		if($cuit){
			$cuit_length = strlen((string)$cuit);
			$message = ['error'=> true,'error_message'=>'el cuit debe tener 11 caracteres para ser válido.'];
			if($cuit_length < 11){ 
				return json_encode($message); 
			}
			$respuesta = SQLConnection::backendStoreProcedure('api_busqueda_padron_completa',array('CUIT',$cuit,$max_rows));
			//SQLConnection::consumirServicio($user_id,$cuit,43);
		}elseif($nombre){
			$nombre_length = strlen((string)$nombre);
			$message = ['error'=> true,'error_message'=>'El nombre debe contener almenos 3 caracteres para ser válido'];
			if($nombre_length < 3){ 
				return json_encode($message); 
			}
			$nombre = Misc::parsearBusquedaPadron($nombre);
			$respuesta = SQLConnection::backendStoreProcedure('api_busqueda_padron_completa',array('NOMBRE',$nombre,$max_rows));
			//SQLConnection::consumirServicio($user_id,substr($nombre_buscado, 0, 19),43);
		}

		return json_encode($respuesta);

	}


	/*OJO ,ésta función lleva hardcodeado el user hasta que se sepa como se van a contabilizar los consumos para éste caso
	en particular.*/


	public static function obtenerBuscador15112023(){
	$cuit      = trim(Request::input('tax_id'));
	$nombre    = trim(Request::input('name'));
	$nombre = str_replace("'", "", $nombre);
	$nombre = str_replace('"', '', $nombre);
	$nombre_buscado = $nombre;
	$type    = trim(Request::input('type'));
	if($type == 'PERSON'){
	  $type = 'F';
	}else if($type == 'COMPANY'){
	  $type = 'J';
	}else{
	  $type = '';
	}
	$max_rows  = Request::input('max_rows');
	if(!$max_rows){$max_rows = 50;}
	if($max_rows > 500 || $max_rows < 50){
	  $message = ['error'=> true,'error_message'=>'The MAX_ROWS parameter is out of range. Please input values between 50 and 500'];
	  return json_encode($message);
	}
	$respuesta = [];

	if(!$cuit && !$nombre){
	  $message = ['error'=> true,'error_message'=>'Input either TAX_ID parameter or NAME in order to get results.'];
	  return json_encode($message);
	}
	 //obtenerAFIP.
	if(!empty($cuit) && strlen($cuit) == 11){
	  AFIPController::obtenerPadron($cuit,true,'AR',false);
	}
	  //CREDITSAFE.
	$user_id = '308816173';
	if($cuit){
	  $cuit_length = strlen((string)$cuit);
	  $message = ['error'=> true,'error_message'=>'The TAX_ID parameter must be at least 5 characters long for a valid identification number'];
	  if($cuit_length < 5){ return json_encode($message); }
	  $respuesta = SQLConnection::backendStoreProcedure('api_busqueda_padron',array($cuit,$max_rows,$type));

	  $usuario   = Session::get('usuario');
	  $producto  = $usuario->producto ?? 43;
		self::consumir_servicio($cuit,$producto);
	  //SQLConnection::consumirServicio($user_id,$cuit,43);
	}else if($nombre){
	  $nombre_length = strlen((string)$nombre);
	  $message = ['error'=> true,'error_message'=>'The NAME parameter must be at least 3 characters long for a valid name'];
	  if($nombre_length < 3){ return json_encode($message); }
	  $nombre = Misc::parsearBusquedaPadron($nombre);
	  $respuesta = SQLConnection::backendStoreProcedure('api_busqueda_padron',array($nombre,$max_rows,$type));

	  $usuario   = Session::get('usuario');
	  $producto  = $usuario->producto ?? 43;
		self::consumir_servicio(substr($nombre_buscado, 0, 19),$producto);
	  //SQLConnection::consumirServicio($user_id,substr($nombre_buscado, 0, 19),43);
	}

	return json_encode($respuesta);

  }



	public static function obtenerBuscador(){
		$cuit      = trim(Request::input('tax_id'));
		$nombre    = trim(Request::input('name'));
		$nombre = str_replace("'", "", $nombre);
		$nombre = str_replace('"', '', $nombre);
		$nombre_buscado = $nombre;

		$type    = strtoupper(trim(Request::input('type')));
		
		if ($type == 'PERSON' || $type == 'P' || $type == 'F') {
			$type = 'F';
		} elseif ($type == 'COMPANY' || $type == 'C' || $type == 'J') {
			$type = 'J';
		} else {
			$type = '';
		}

		$max_rows  = Request::input('max_rows');
		if (!$max_rows) {
			$max_rows = 50;
		}
		if ($max_rows > 500 || $max_rows < 50) {
			$message = ['error'=> true,'error_message'=>'The MAX_ROWS parameter is out of range. Please input values between 50 and 500'];
			return json_encode($message);
		}
		$respuesta = [];

		if (!$cuit && !$nombre) {
			$message = ['error'=> true,'error_message'=>'Input either TAX_ID parameter or NAME in order to get results.'];
			return json_encode($message);
		}
		//obtenerAFIP.
		if (!empty($cuit) && strlen($cuit) == 11) {
			AFIPController::obtenerPadron($cuit,true,'AR',false);
		}
		//CREDITSAFE.
		$user_id = '308816173';
		if ($cuit) {
			$cuit_length = strlen((string)$cuit);
			$message = ['error'=> true,'error_message'=>'The TAX_ID parameter must be at least 5 characters long for a valid identification number'];
			if ($cuit_length < 5) { 
				return json_encode($message); 
			}
			$respuesta = SQLConnection::backendStoreProcedure('api_busqueda_padron',array($cuit,$max_rows,$type));

			$usuario   = Session::get('usuario');
			$producto  = $usuario->producto ?? 43;
			self::consumir_servicio($cuit,$producto);
			//SQLConnection::consumirServicio($user_id,$cuit,43);
		} else if ($nombre) {
			$nombre_length = strlen((string)$nombre);
			$message = ['error'=> true,'error_message'=>'The NAME parameter must be at least 3 characters long for a valid name'];
			if ($nombre_length < 3) { 
				return json_encode($message); 
			}


			// $nombre = Misc::parsearBusquedaPadron($nombre); 
			// Esto de arriba, hacía el NEAR entre todas las palabras y tardaba mucho,
			// 15/11/2023: lo cambiamos para que lo haga igual que hace el buscar_edictos_homonimos del Informe Comercial 
			// Persona Fisica: Todas las combinaciones de orden posible (maximo 120)
			// Personas Juridica: Saca omitidos del principio y final 
			if ($type == 'F')
			{
				$razon_social_explode = explode(" ", $nombre);
				
				//Elimina de las combinaciones los valores que contienen una letra 
				$explode_aux = [];
				foreach ($razon_social_explode as $key => $value) {
				  if(isset($value) && (strlen($value) > 1)) {
					$explode_aux[] = $value;
				  }
				}
				$razon_social_explode = $explode_aux;

				$razon_social_explode = array_values($razon_social_explode);
				$resultado_razon_social    = Misc::resultadoCombinaciones($razon_social_explode);

				//Limita a 120 resultados las combinaciones (es para un maximo de 5 palabras)
			    $resultado_razon_social = array_slice($resultado_razon_social, -120);
				$cant_resultado_razon_social = count($resultado_razon_social);
				$razon_social_completa     = '';

				if($cant_resultado_razon_social < 120){
					foreach($resultado_razon_social as $key => $rs){
					  if(!(end($resultado_razon_social) == $rs)){
						$razon_social_completa .='NEAR(('.str_replace(" ",",",$rs).'),0,true) OR ';
					  }else{
						$razon_social_completa .= 'NEAR(('.str_replace(" ",",",$rs).'),0,true)';
					  }
					}
			    }else{
					$razon_social_completa = "\"".$nombre."\"";
				}
			}


			if ($type !== 'F')
			{
				$resultado_nombres_ant[] = $nombre;
				
				$razon_social_completa = '';
				$sinonimos = Misc::diccionarioSinonimosTEST($resultado_nombres_ant);

				$count_sinonimo = count($sinonimos)-1;
				foreach($sinonimos as $key => $rs){
				  if(!($key == $count_sinonimo)){
					$razon_social_completa .= $rs.'OR';
				  }else{
					$razon_social_completa .= $rs;
				  }
				}
				if(!$razon_social_completa) {$razon_social_completa = "\"".$nombre."\"";}
			
			}

			$nombre = $razon_social_completa; 

			$respuesta = SQLConnection::backendStoreProcedure('api_busqueda_padron',array($nombre,$max_rows,$type));

			$usuario   = Session::get('usuario');
			$producto  = $usuario->producto ?? 43;
			self::consumir_servicio(substr($nombre_buscado, 0, 19),$producto);
			//SQLConnection::consumirServicio($user_id,substr($nombre_buscado, 0, 19),43);
		}

		return json_encode($respuesta);

	}

	public static function obtenerSociosDirectores(){
		$cuit      = trim(Request::input('cuit'));
		$tipo_persona   = (substr($cuit,0,1) != '3') ? 'f' : 'j';
		$socios_directores         = SQLConnection::obtenerSociosDirectores($cuit,$tipo_persona);
		if(!empty($socios_directores)){
			foreach ($socios_directores as $key => $value) {
				unset($socios_directores[$key]->idp);
				$socios_directores[$key]->cargo = $socios_directores[$key]->car_nombre;
				unset($socios_directores[$key]->car_nombre);
				unset($socios_directores[$key]->c04_periodo_desde);
				unset($socios_directores[$key]->c04_periodo_hasta);
				unset($socios_directores[$key]->actividad);
				unset($socios_directores[$key]->fecha_cons);
				unset($socios_directores[$key]->fecha_ins_rpc);
				unset($socios_directores[$key]->nacionalidad);
				unset($socios_directores[$key]->estado_civil);
				unset($socios_directores[$key]->tipo_doc1);
				unset($socios_directores[$key]->nrodoc_1);
				unset($socios_directores[$key]->tipo_doc2);
				unset($socios_directores[$key]->nrodoc_2);
				unset($socios_directores[$key]->fecha_nac);
				unset($socios_directores[$key]->c04_periodo_desde);
				unset($socios_directores[$key]->c04_periodo_hasta);
			}
		}
		$info['socios_directores'] = $socios_directores;
		$usuario        = Session::get('usuario');
		$producto       = $usuario->producto ?? 35;
		self::consumir_servicio($cuit,$producto);
		//SQLConnection::consumirServicio($user_id,$cuit,35);

		return json_encode($info);
	}

	public static function obtenerIC(){
		
		$sesion         = Self::obtenerSesion();

		$cuit           = $sesion['cuit'];

		//consume el servicio
		self::consumir_servicio($cuit);
		
		$idp            = SQLConnection::obtenerIdPadron($cuit);
		$id_padron      = $idp->id_padron;
		//$score = self::$MainController->obtenerServicioScore($cuit);
		$persona_fisica = (substr($cuit,0,1) != '3') ? true : false;
		$tipo_persona   = (substr($cuit,0,1) != '3') ? 'f' : 'j';
		//Nodos Principales Obligatorios
		$resp           = [];
		$formales       = [];
		$fiscales       = [];
		$legales        = [];
		$bancos         = [];

		$formales   = self::obtenerFormales($cuit,$persona_fisica);
		$fiscales   = self::obtenerFiscales($cuit,$id_padron);
		$bancos     = self::obtenerBancos($cuit,$id_padron,$persona_fisica);
		$sociedades = self::obtenerSociedades($cuit,$tipo_persona);
		$legales    = self::obtenerLegales($cuit);

		//$resp['score'] = $score;
		$resp['formales'] = $formales;
		$resp['fiscales'] = $fiscales;
		$resp['sociedades'] = $sociedades;
		$resp['bcra']   = $bancos;
		$resp['legales']  = $legales;

		return json_encode($resp);
	}
	
	public static function obtenerChequesBancos(){
		$cuit           = Request::input('cuit');
		$idp            = SQLConnection::obtenerIdPadron($cuit);
		$id_padron      = $idp->id_padron;
		$persona_fisica = (substr($cuit,0,1) != '3') ? true : false;
		$tipo_persona   = (substr($cuit,0,1) != '3') ? 'f' : 'j';
		/*Nodos Principales Obligatorios*/
		$bancos         = [];
		$bancos     = self::obtenerBancos($cuit,$id_padron,$persona_fisica);
		$resp['bcra']   = $bancos;
		$usuario        = Session::get('usuario');
		$user_id        = $usuario->user_id;

		$producto       = $usuario->producto ?? 30;
		self::consumir_servicio($cuit,$producto);
		//SQLConnection::consumirServicio($user_id,$cuit,30);
		return json_encode($resp);
	}
/* lo cambiamos por el de www2 
	//busca tanto persona física como jurídica relacionadas a un cuit o un nombre
	public static function buscarPersona(){	
	//CAMBIAR BUSCADOR POR EL DE PRODUCCION
	$apikey					= Request::input('apikey');
	if($apikey != '1F44A3FAA0C15C42'){ return json_encode(['error'=>true]); }
	$identificacion			= Request::input('identificacion');
	$nombre_persona			= Request::input('nombre_persona');
	$domicilio				= Request::input('domicilio');
	$tipo_persona			= Request::input('tipo_persona');
	$buscar_empleadores		= Request::input('buscar_empleadores') ?? 0;
	$buscar_actividades		= Request::input('buscar_actividades') ?? 0;
	$buscar_vinculaciones 	= Request::input('buscar_vinculaciones') ?? 0;
	$tipo_domicilio			= Request::input('tipo_domicilio');

	$peticion = ($identificacion != '') ? $identificacion : $nombre_persona;
	
	$respuesta	= MainController::obtenerResultadoPadron($peticion);
	//$respuesta        = SQLConnection::backendStoreProcedure('api_buscar_razon_social',array($identificacion,$nombre_persona,$tipo_persona));
	
	$domicilios 			= '';
	$vinculaciones 			= '';
	$actividad_principal 	= '';
	if (isset($respuesta[0])){
	foreach ($respuesta as $key => $resp) {
		if($tipo_persona != 'J'){
			if($resp->tipo_persona == 'F' ){
				$formales					= self::buscarDatosFormales($resp->identificacion);
				$formales					= json_decode($formales);
				$respuesta[$key]->fecha_nacimiento	= isset($formales->fecha_nacimiento) ? $formales->fecha_nacimiento : '';
				$respuesta[$key]->fecha_defuncion	= isset($formales->fecha_defuncion) ? $formales->fecha_defuncion : '';
			}
			if($resp->tipo_persona == 'F' && $buscar_empleadores == 1){
				$empleadores					= self::buscarEmpleadores($resp->identificacion);
				$empleadores					= json_decode($empleadores);
				$respuesta[$key]->empleadores	= $empleadores;
			}
		}
		if($domicilio){
				$domicilios	= self::buscarDomicilios($resp->identificacion);
				$domicilios	= json_decode($domicilios);
			foreach ($domicilios as $key2 => $value) {
				if($tipo_domicilio == 'principal'){
					if(stripos($value->tipo_domicilio, 'D') !== false){
						$domicilios = $value;
						if($resp->tipo_persona == 'F' ){
							$respuesta[$key]->pais = $value->pai_nombre;
							$respuesta[$key]->provincia = $value->prv_nombre;
						}
						break;
					}
				}
			}
		}
		if($buscar_actividades == 1){
			$actividad_principal					= self::buscarActividadPrincipal($resp->identificacion);
			$actividad_principal					= json_decode($actividad_principal);
			$respuesta[$key]->actividad_principal	= $actividad_principal;
		}
		if($buscar_vinculaciones == 1){
				$vinculaciones					= self::buscarVinculaciones($resp->identificacion,$tipo_persona);
				$vinculaciones					= json_decode($vinculaciones);
				$respuesta[$key]->vinculaciones	= $vinculaciones;
		}
		$respuesta[$key]->domicilios          = $domicilios;
		if($tipo_persona == 'F'  && $resp->tipo_persona == 'F'){
			if(!isset($respuesta[$key]->formales)){
				$respuesta[$key]->formales = [];
			}
			if(!isset($respuesta[$key]->empleadores)){
				$respuesta[$key]->empleadores = [];
			}
		}
	}
	}

	return json_encode($respuesta);
	}
*/

  //busca tanto persona física como jurídica relacionadas a un cuit o un nombre
  public static function buscarPersona(){	
	//CAMBIAR BUSCADOR POR EL DE PRODUCCION
	$apikey					= Request::input('apikey');
	if($apikey != '1F44A3FAA0C15C42'){ return json_encode(['error'=>true]); }
	$identificacion			= Request::input('identificacion');
	$nombre_persona			= Request::input('nombre_persona');
	$domicilio				= Request::input('domicilio');
	$tipo_persona			= Request::input('tipo_persona');
	$buscar_empleadores		= Request::input('buscar_empleadores') ?? 0;
	$buscar_actividades		= Request::input('buscar_actividades') ?? 0;
	$buscar_vinculaciones 	= Request::input('buscar_vinculaciones') ?? 0;
	$tipo_domicilio			= Request::input('tipo_domicilio');

	$peticion = ($identificacion != '') ? $identificacion : $nombre_persona;
	$respuesta	= MainController::obtenerResultadoPadron($peticion,$tipo_persona);
	//$respuesta        = SQLConnection::backendStoreProcedure('api_buscar_razon_social',array($identificacion,$nombre_persona,$tipo_persona));
	$domicilios 			= '';
	$vinculaciones 			= '';
	$actividad_principal 	= '';
	//if (isset($respuesta[0])){
	foreach ($respuesta as $key => $resp) {
		if($tipo_persona != 'J'){
			if($resp->tipo_persona == 'F' ){
				$formales					= self::buscarDatosFormales($resp->identificacion);
				$formales					= json_decode($formales);
				$respuesta[$key]->fecha_nacimiento	= isset($formales->fecha_nacimiento) ? $formales->fecha_nacimiento : '';
				$respuesta[$key]->fecha_defuncion	= isset($formales->fecha_defuncion) ? $formales->fecha_defuncion : '';
			}
			if($resp->tipo_persona == 'F' && $buscar_empleadores == 1){
				$empleadores					= self::buscarEmpleadores($resp->identificacion);
				$empleadores					= json_decode($empleadores);
				$respuesta[$key]->empleadores	= $empleadores;
			}
		}
		$domicilios	= self::buscarDomicilios($resp->identificacion);
		$domicilios	= json_decode($domicilios);
		foreach ($domicilios as $key2 => $value) {
			if($tipo_domicilio == 'principal'){
				if(stripos($value->tipo_domicilio, 'D') !== false){
					$domicilios = $value;
					if($resp->tipo_persona == 'F' ){
						$respuesta[$key]->pais = $value->pai_nombre;
						$respuesta[$key]->provincia = $value->prv_nombre;
					}
					break;
				}
			}
		}
		if($buscar_actividades == 1){
			$actividad_principal					= self::buscarActividadPrincipal($resp->identificacion);
			$actividad_principal					= json_decode($actividad_principal);
			$respuesta[$key]->actividad_principal	= $actividad_principal;
		}
		if($buscar_vinculaciones == 1){
				$vinculaciones					= self::buscarVinculaciones($resp->identificacion,$tipo_persona);
				$vinculaciones					= json_decode($vinculaciones);
				$respuesta[$key]->vinculaciones	= $vinculaciones;
		}
		$respuesta[$key]->domicilios          = $domicilios;
		if($tipo_persona == 'F'  && $resp->tipo_persona == 'F'){
			if(!isset($respuesta[$key]->formales)){
				$respuesta[$key]->formales = [];
			}
			if(!isset($respuesta[$key]->empleadores)){
				$respuesta[$key]->empleadores = [];
			}
		}
	}
	//}

	return json_encode($respuesta);
  }


  //busca todos los datos formales de una persona física
  private static function buscarDatosFormales($identificacion){
	$respuesta        = SQLConnection::backendStoreProcedure('api_buscar_datos_formales',array($identificacion),'selectOne');
	return json_encode($respuesta);
  }

  //busca todos los empleadores relacionados a un cuil/cuit
  private static function buscarEmpleadores($identificacion){
	$respuesta        = SQLConnection::backendStoreProcedure('api_buscar_empleado_de',array($identificacion));
	return json_encode($respuesta);
  }

  //busca la actividad principal del cuil/cuit relacionado
  private static function buscarActividadPrincipal($identificacion){
	$respuesta        = SQLConnection::backendStoreProcedure('api_buscar_actividad_principal',array($identificacion));
	return json_encode($respuesta);
  }


  //busca todos los domicilios relacionados a un cuit
  private static function buscarDomicilios($identificacion){
	$respuesta        = SQLConnection::backendStoreProcedure('sp_obtener_domicilios',array($identificacion));
	return json_encode($respuesta);
  }

  //busca todas las vinculaciones relacionadas a un cuit
  private static function buscarVinculaciones($identificacion,$tipo_persona){
	$respuesta        = SQLConnection::backendStoreProcedure('api_buscar_vinculaciones',array($identificacion,$tipo_persona));
	return json_encode($respuesta);
  }


  public static function obtenerValidacionCUIT(){
	$cuit           = Request::input('cuit');
	 //obtenerAFIP.
	if(!empty($cuit) && strlen($cuit) == 11){
	  AFIPController::obtenerPadron($cuit,true,'AR',false);
	}
	$nombre         = trim(Request::input('nombre'));
	$nombre_contains= '';
	if($nombre){
	  $nombre_contains= Misc::parsearBusquedaPadron($nombre);
	}
	$respuesta = SQLConnection::backendStoreProcedure('api_validacion_cuit',array($cuit,$nombre,$nombre_contains));
	$respuesta[0]->cuit_buscado   = $cuit;
	$respuesta[0]->nombre_buscado = $nombre;
	$usuario        = Session::get('usuario');
	$user_id        = $usuario->user_id;

	$producto       = $usuario->producto ?? 26;
	self::consumir_servicio($cuit,$producto);
	//SQLConnection::consumirServicio($user_id,$cuit,26);
	return json_encode($respuesta);
  }
  

  public static function obtenerIDVerification(){
	$pedido             = date('Y-m-d h:i:s');
	$ip                 = $_SERVER['REMOTE_ADDR'];
	$cuit               = Request::input('cuit');
	$apikey             = Request::input('apikey');
	$url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
	$usuario        = Session::get('usuario');
	$user_id        = $usuario->user_id;
	/* 22/07/2021 Agregamos que pase por afip */
	if(!empty($cuit) && strlen($cuit) == 11){
		AFIPController::obtenerPadron($cuit,true,'AR',false);
	}

	SQLConnection::backendStoreProcedure('insertar_api_log',array($apikey,$cuit,$user_id,$pedido,$ip,$url));

	$cantidad_invalidos = Request::input('cantidad_invalidos');
	$cantidad_validos   = Request::input('cantidad_validos');
	if(empty($cantidad_validos)){
	  $cantidad_validos = 1;
	}
	if(empty($cantidad_invalidos)){
	  $cantidad_invalidos = 5;
	}

	$respuesta['financial_data']= SQLConnection::backendStoreProcedure('ws_idverification_bancos',array($cuit,$cantidad_invalidos,$cantidad_validos));
	$respuesta['addresses']     = SQLConnection::backendStoreProcedure('ws_idverification_domicilios',array($cuit,$cantidad_invalidos,$cantidad_validos));
	$respuesta['business_data'] = SQLConnection::backendStoreProcedure('ws_idverification_empresas',array($cuit,$cantidad_invalidos,$cantidad_validos));
	$respuesta['personal_data'] = SQLConnection::backendStoreProcedure('ws_idverification_personales',array($cuit,$cantidad_invalidos,$cantidad_validos));
	$respuesta['related_data']  = SQLConnection::backendStoreProcedure('ws_idverification_sociedades',array($cuit,$cantidad_invalidos,$cantidad_validos));
	
	$usuario        = Session::get('usuario');
	$producto       = $usuario->producto ?? 27;
	self::consumir_servicio($cuit,$producto);
	//SQLConnection::consumirServicio($user_id,$cuit,27);
	
	return json_encode($respuesta);
  }

  private static function obtenerFiscales($cuit,$id_padron){
	$impuestos            = SQLConnection::obtenerPadronImpuestos($id_padron);
	if(!empty($impuestos)){
	  foreach ($impuestos as $key => $value) {
		  unset($impuestos[$key]->codigo_impuesto);
	  }
	}
	$info['actividades']  = SQLConnection::obtenerPadronActividades($id_padron);
	$caracterizaciones    = SQLConnection::obtenerPadronCaracterizaciones($id_padron);
	if(!empty($caracterizaciones)){
	  foreach ($caracterizaciones as $key => $value) {
		  unset($caracterizaciones[$key]->codigo_caracterizacion);
	  }
	}
	$inscripciones                = SQLConnection::obtenerInscripciones($cuit);
	if(!empty($inscripciones)){
	  unset($inscripciones->actividad);
	  unset($inscripciones->country_name);
	}
	$info['impuestos']        = $impuestos;
	$info['caracterizaciones'] = $caracterizaciones;
	$info['inscripciones']    =  $inscripciones;
	return $info;
  }

  private static function obtenerBancos($cuit,$id_persona,$persona_fisica){
	$bancos = SQLConnection::obtenerBancos($cuit);
	if(!empty($bancos)){
	  foreach ($bancos as $key => $value) {
		$bancos[$key]->situacion = (int)$bancos[$key]->situacion;
	  }
	}
	$info['bancos']   = $bancos;

	$cheques  = SQLConnection::obtenerCheques($cuit,$id_persona,$persona_fisica);
	if(!empty($cheques)){
	  foreach ($cheques as $key => $value) {
		if($cheques[$key]->tipo == 'vinculaciones' ){
		  unset($cheques[$key]);
		  continue;
		}
		if($cheques[$key]->tipo == 'a_nombre_de_empresa' ){
		  if($persona_fisica){
			$cheques[$key]->tipo = 'firmado para empresas';
		  }else{
			$cheques[$key]->tipo = 'propio';
		  }

		}
		if($cheques[$key]->nombre_persona_relacionado == '0' ){
		  $cheques[$key]->nombre_persona_relacionado = null;
		}
		if($cheques[$key]->Cuit_relacionado == '0' ){
		  $cheques[$key]->Cuit_relacionado = null;
		}
		unset($cheques[$key]->idp);
		unset($cheques[$key]->idppr);
		unset($cheques[$key]->causa);
		unset($cheques[$key]->total_cheques);
		unset($cheques[$key]->cantidad);
	  }
	}
	//tipo "vinculaciones" sacar a la mierda.
	$info['cheques'] = $cheques;
	return $info;
  }

  private static function obtenerFormales($cuit,$persona_fisica){
	$formales['domicilios'] = [];
	$domicilios = SQLConnection::obtenerDomicilios($cuit);
	if(!empty($domicilios)){
	  foreach ($domicilios as $key => $value) {
		$domicilios[$key]->provincia  = $domicilios[$key]->prv_nombre;
		$domicilios[$key]->localidad  = $domicilios[$key]->loc_nombre;
		$domicilios[$key]->pais       = $domicilios[$key]->pai_nombre;
		$domicilios[$key]->cp         = $domicilios[$key]->codpos;
		unset($domicilios[$key]->prv_nombre);
		unset($domicilios[$key]->loc_nombre);
		unset($domicilios[$key]->pai_nombre);
		unset($domicilios[$key]->codpos);
		unset($domicilios[$key]->isLast);
		unset($domicilios[$key]->id_domicilio);
		unset($domicilios[$key]->visible);
		unset($domicilios[$key]->telefono);
		unset($domicilios[$key]->email);
		unset($domicilios[$key]->tipo_domicilio);
		$formales['domicilios'][] = $value;
	  }
	}
	$formales['defuncion']      = SQLConnection::obtenerDefuncion($cuit);
	$persona = null;
	if($persona_fisica){ 
	$persona                    = SQLConnection::obtenerPersona($cuit);
	}

	if(!empty($persona) ){
	  $persona->cuit        = $persona->identificacion;
	  unset($persona->identificacion);
	  unset($persona->fecha_nac_dmy);
	  unset($persona->codigo_profesion);
	  unset($persona->codigo_ocupacion);
	  unset($persona->doc_codigo_2);
	  unset($persona->c02_nrodoc_2);
	  unset($persona->codigo_estado_civil);
	  unset($persona->pro_codigo_ocupacion);
	  unset($persona->doc_codigoc_c2);
	  unset($persona->doc_codigoc_c);
	  unset($persona->c02_nrodoc_conyuge_2);
	  unset($persona->doc_codigo);
	  unset($persona->nombre_conyuge);
	  unset($persona->doc_codigo_c);
	  unset($persona->nombre_padre);
	  unset($persona->nombre_madre);

	  unset($persona->c02_nrodoc);
	  unset($persona->c02_nrodoc_conyuge);
	  if(!empty($persona->fecha_nacimiento)){
		$anio = explode('/', $persona->fecha_nacimiento);
		$anio = $anio[2];
		if($anio){
		  $persona->edad = date('Y') - $anio;
		}
	  }
	}
	$formales['persona'] = $persona;
	$empleado_de = null;
	if($persona_fisica){ 
	   $empleado_de    = SQLConnection::obtenerEmpleadoDe($cuit);
	  if(!empty($empleado_de)){
	   foreach ($empleado_de as $key => $value) {
		unset($empleado_de[$key]->ultimo_periodo_procesado);
	   }
	  }
	}

	  $formales['empleado_de'] = $empleado_de;
	return $formales;
  }

  private static function obtenerSociedades($cuit,$tipo_persona){

	$sociedades                = SQLConnection::obtenerSociedades($cuit);
	if(!empty($sociedades)){
		unset($sociedades->moneda);
		unset($sociedades->id_sociedad);
		unset($sociedades->c01_codigo);
		unset($sociedades->soc_codigo);
		unset($sociedades->sindicatura);
		unset($sociedades->fecha_ins_rpc);
		unset($sociedades->nro_ins_rpc);
		unset($sociedades->folio);
		unset($sociedades->libro);
		unset($sociedades->tomo);
		unset($sociedades->duracion);
		unset($sociedades->ram_codigo);
		unset($sociedades->sra_codigo);
		unset($sociedades->nroigj);
		unset($sociedades->prv_codigo);
		unset($sociedades->nroana);
		unset($sociedades->nroexp);
		unset($sociedades->fecha_act);
		unset($sociedades->user_id);
		unset($sociedades->id);
		//$sociedades->capital = number_format($sociedades->capital,0,2);
		$sociedades->moneda_codigo = $sociedades->mon_codigo;
		$sociedades->iibb = $sociedades->ingbru;
		unset($sociedades->mon_codigo);
		unset($sociedades->ingbru);
	}
	$info['datos_inscripcion'] = $sociedades;
	$accionista_de             = SQLConnection::obtenerAccionistasDe($cuit);
	  if(!empty($accionista_de)){
		foreach ($accionista_de as $key => $value) {
		  unset($accionista_de[$key]->cant_acciones);
		  unset($accionista_de[$key]->monto);
		  unset($accionista_de[$key]->porcentaje);
		  unset($accionista_de[$key]->idp);
		  unset($accionista_de[$key]->fecha_ins_rpc);
		}
	  }
	$info['accionista_de'] = $accionista_de;
	$info['participaciones']           = SQLConnection::obtenerParticipacionSociosDirectores($cuit);
	$socios_directores         = SQLConnection::obtenerSociosDirectores($cuit,$tipo_persona);
	if(!empty($socios_directores)){
		foreach ($socios_directores as $key => $value) {
		  unset($socios_directores[$key]->idp);
		  $socios_directores[$key]->cargo = $socios_directores[$key]->car_nombre;
		  $socios_directores[$key]->periodo_desde = $socios_directores[$key]->c04_periodo_desde;
		  $socios_directores[$key]->periodo_hasta = $socios_directores[$key]->c04_periodo_hasta;
		  unset($socios_directores[$key]->car_nombre);
		  unset($socios_directores[$key]->c04_periodo_desde);
		  unset($socios_directores[$key]->c04_periodo_hasta);
		  unset($socios_directores[$key]->actividad);
		  unset($socios_directores[$key]->fecha_cons);
		  unset($socios_directores[$key]->fecha_ins_rpc);
		  unset($socios_directores[$key]->nacionalidad);
		  unset($socios_directores[$key]->estado_civil);
		  unset($socios_directores[$key]->tipo_doc1);
		  unset($socios_directores[$key]->nrodoc_1);
		  unset($socios_directores[$key]->tipo_doc2);
		  unset($socios_directores[$key]->nrodoc_2);
		  unset($socios_directores[$key]->fecha_nac);
		}
	  }
	$info['socios_directores'] = $socios_directores;
	return $info;
  }
  
  private static function obtenerLegales($cuit){
	$juicios['demandado']   = [];
	$juicios['actor']       = [];
	$demandado              = SQLConnection::obtenerJuiciosDemandadoActor(null,'D',$cuit);
	$actor                  = SQLConnection::obtenerJuiciosDemandadoActor(null,'A',$cuit);
	if(!empty($demandado)){
	  foreach ($demandado as $key => $value) {
		$demandado[$key]->cuit_actor    = $demandado[$key]->cuit_otra_parte;
		$demandado[$key]->nombre_actor  = $demandado[$key]->nombre_otra_parte;
		unset($demandado[$key]->cuit_otra_parte);
		unset($demandado[$key]->nombre_otra_parte);
		unset($demandado[$key]->demandado_actor);
		unset($demandado[$key]->fecha_causa_dmy);
		unset($demandado[$key]->id_tipo_causa);
		unset($demandado[$key]->seccion);
		unset($demandado[$key]->grupo);
		unset($demandado[$key]->tiempo);
		unset($demandado[$key]->nombre_padron_otra_parte);
		unset($demandado[$key]->visible);
		unset($demandado[$key]->vigente);
		unset($demandado[$key]->observaciones);
		unset($demandado[$key]->verificaciones);
		unset($demandado[$key]->nombre_y_apellido_del_sindico);
		unset($demandado[$key]->domicilio_sindico);
		unset($demandado[$key]->domicilio_completo_sindico);
		$juicios['demandado'][] = $value;
	  }
	}
	if(!empty($actor)){
	  foreach ($actor as $key => $value) {
		$actor[$key]->cuit_demandado    = $actor[$key]->cuit_otra_parte;
		$actor[$key]->nombre_demandado  = $actor[$key]->nombre_otra_parte;
		unset($actor[$key]->cuit_otra_parte);
		unset($actor[$key]->nombre_otra_parte);
		unset($actor[$key]->demandado_actor);
		unset($actor[$key]->fecha_causa_dmy);
		unset($actor[$key]->id_tipo_causa);
		unset($actor[$key]->seccion);
		unset($actor[$key]->grupo);
		unset($actor[$key]->tiempo);
		unset($actor[$key]->nombre_padron_otra_parte);
		unset($actor[$key]->visible);
		unset($actor[$key]->vigente);
		unset($actor[$key]->observaciones);
		$juicios['actor'][] = $value;
	  }
	}
	return $juicios;
  }


  private static function obtenerSesion(){
	$cuit       = isset($_POST['cuit'])   ? $_POST['cuit']    : '';
	$apikey     = isset($_POST['apikey']) ? $_POST['apikey']  : '';
	$usuario        = Session::get('usuario');
	$user_id        = $usuario->user_id;

	$producto = ENV('INFORME_API');
	self::consumir_servicio($cuit,$producto);
	//SQLConnection::consumirServicio($user_id,$cuit,ENV('INFORME_API'));
	
	if(empty($cuit)){
	  echo  json_encode(array('error'=>'1','message' =>'Error: La CUIT no está seteada o es inválida'));
	  die();
	}
	$razon_social   = SQLConnection::obtenerRazonSocial($cuit);
	if(!$razon_social){
	  echo  json_encode(array('error'=>'1','message' =>'Error: La CUIT no está seteada o es inválida'));
	  die();

	 }
	$razon_social   = $razon_social->nombre_persona;
  
	$client_id      = $usuario->cliente['client_id'];
	$secciones      = self::obtenerSeccionesHabilitadas($user_id);
	$usuario->cliente[ENV('INFORME_API')]             = new stdClass;
	$secciones = array_change_key_case($secciones, CASE_LOWER);
	$usuario->cliente[ENV('INFORME_API')]->secciones  = $secciones;
	$usuario->cliente[ENV('INFORME_API')]->client_id  = $client_id;
	Session::put('usuario',$usuario);
	Session::save();
	return ['cuit' => $cuit,'razon_social' => $razon_social,'apikey' => $apikey,'secciones' => $secciones];
  }

  private static function obtenerSeccionesHabilitadas($user_id){
	if($user_id == '673762136'){
	  $secciones_habilitadas  = SQLConnection::obtenerSeccionesHabilitadasInforme($user_id,ENV('INFORME_API'));
	}else{
	  $secciones_habilitadas  = SQLConnection::obtenerSeccionesHabilitadasInforme($user_id,ENV('ID_INFORME_COMERCIAL'));
	}
	$secciones_habilitadas_ordenadas = [];
	foreach($secciones_habilitadas as $secciones){
	  $secciones_habilitadas_ordenadas[$secciones->nombre_seccion] = $secciones; 
	}
	return $secciones_habilitadas_ordenadas;
  }



//Calculos de Score:
  public static function calcularScorePersonaJuridica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$porcentaje_por_afectacion,$numero_cliente=''){
	$calc_score['score']                      = $score;
	$calc_score['afecta_directo']             = [];
	$calc_score['afecta_directo']['total']    = 0;
	$calc_score['afecta_directo']['debug']    = '';
	$calc_score['afecta_indirecto']           = [];
	$calc_score['afecta_indirecto']['debug']  = '';
	$total_indirecto                          = [];
	$ultima_fuente_cendeu  = SQLConnection::backendStoreProcedure('obtener_ultima_fuente',array('cendeu'),'selectOne'); 
	foreach($score_ordenado as $key_grupo => $score_grupo){
		  
	  foreach($score_grupo as $key_codigo => $score_codigo){
		  if($key_codigo == 6 || $key_codigo == ''){continue;}
		foreach($score_codigo as $key_item => $score_item){
		  if($key_grupo == 2){
			foreach($score_item as $key_fecha => $score_fecha){
			  $datetime1 = new DateTime($score_fecha->fecha);
			  $datetime2 = new DateTime();
			  $interval = $datetime1->diff($datetime2);
			  $score_fecha->dias =  $interval->format('%a');
			  $cantidad = count($score_item);

			  foreach($tabla_score_con_cantidades[$key_grupo][$key_codigo] as $key_cantidades => $item_cantidades){

				if($score_fecha->codigo == $item_cantidades->codigo 
				  &&( $score_fecha->dias > $item_cantidades->dias_desde 
				  && $score_fecha->dias <=  $item_cantidades->dias_hasta) 
				  && ($cantidad  >= $item_cantidades->cant_desde 
				  && $cantidad  <= $item_cantidades->cant_hasta) 
				){

				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $cantidad;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad = $cantidad;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_fecha->dias;
				}
			  }
			}
		  }else{
			$datetime1 = new DateTime($score_item->fecha);
			if($score_item->grupo == 3){
				$datetime2 = new DateTime($ultima_fuente_cendeu->fecha_informacion);
			}else{
				$datetime2 = new DateTime();
			}
			$interval = $datetime1->diff($datetime2);
			$score_item->dias =  $interval->format('%a');
			if(isset($tabla_score_con_cantidades[$key_grupo][$key_codigo])){
			foreach($tabla_score_con_cantidades[$key_grupo][$key_codigo] as $key_cantidades => $item_cantidades){

			  if($key_grupo == 1 || $key_grupo == 3){
				if($score_item->codigo == $item_cantidades->codigo 
				  && $score_item->dias > $item_cantidades->dias_desde 
				&& $score_item->dias <=  $item_cantidades->dias_hasta ){
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $score_item->cantidades;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad += 1;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_item->dias;
				}
			
			  }else if($key_grupo == 7 || $key_grupo == 8){

				if($score_item->codigo == $item_cantidades->codigo 
				  && $score_item->cantidades >= $item_cantidades->cant_desde 
				  && $score_item->cantidades <= $item_cantidades->cant_hasta){

				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $score_item->cantidades;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad += 1;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_item->dias;
				}
			  }
			}
			}
		  }
		}
	  }
	}

	foreach($tabla_score_con_cantidades as $key_grupo => $score_grupo){
	  foreach($score_grupo as $key_codigo => $score_codigo){
		 if($key_codigo == 6 || $key_codigo == ''){continue;}
		foreach($score_codigo as $key_item => $score_item){
			if($score_item->cantidad > 0 && $score_item->valor != 0){
			  if($score_item->afecta_directo == 1){
				
				$calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

				$calc_score['afecta_directo']['debug'] =  "Le suma: " .($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $score_item->cantidad. ' días '. $score_item->dias . ' valores '. $score_item->cantidades;
			  }else if($score_item->afecta_directo == 0){
				$calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
				$calc_score['afecta_indirecto']['debug'] =  "Le suma: " .($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $score_item->cantidad. ' días '. $score_item->dias . ' valores '. $score_item->cantidades;
			  }
			}
		}
	  }
	}

	// Se suma el porcentaje solo una vez por cada variable definida en tabla score y solo en caso de situación 1 en todos los bancos.
	if (self::$amerita_situacion_1) {
	  /*foreach ($tabla_score_con_cantidades as $key_grupo => $score_grupo) {
		foreach($score_grupo as $key_codigo => $score_codigo) {
		  if ($key_codigo == 1){
			foreach ($score_codigo as $key_item => $score_item) {
			  $cantidad = 1;

			  if($cantidad > 0 && $score_item->valor != 0) {
				if($score_item->afecta_directo == 1) {
				  $calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

				  $calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				} elseif($score_item->afecta_directo == 0){
				  $calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
				  $calc_score['afecta_indirecto']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				}
			  }
			}
		  }
		}
	  }*/
	} else {
	  // Si existe un registro situación 10 en la tabla score será procesado con dicho valor cuando no sea situación 1 en todos los bancos y periodos.
	  foreach ($tabla_score_con_cantidades as $key_grupo => $score_grupo) {
		foreach($score_grupo as $key_codigo => $score_codigo) {
		  if ($key_codigo == 10){
			foreach ($score_codigo as $key_item => $score_item) {
			  $cantidad = 1;

			  if($cantidad > 0 && $score_item->valor != 0) {
				if($score_item->afecta_directo == 1) {
				  $calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

				  $calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				} elseif($score_item->afecta_directo == 0){
				  $calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
				  $calc_score['afecta_indirecto']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				}
			  }
			}
		  }
		}
	  }
	}

	$calc_score['score'] += $calc_score['afecta_directo']['total'];
	foreach($calc_score['afecta_indirecto'] as $key_grupo => $score_grupo){
	  if($key_grupo=='debug'){continue;}
	  $total_indirecto[$key_grupo] = array_sum($score_grupo['total']);
	}
	/*foreach($total_indirecto as $key_total => $value_total) {

	  switch($key_total) {
		case '1':
		  if($value_total > $porcentaje_por_grupo->judicial){
			$calc_score['score'] -= $porcentaje_por_grupo->judicial;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
		case '2':

		  if($value_total > $porcentaje_por_grupo->cheques){
			$calc_score['score'] -= $porcentaje_por_grupo->cheques;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
		case '3':

		  if($value_total > $porcentaje_por_grupo->cendeu){
			$calc_score['score'] -= $porcentaje_por_grupo->cendeu;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
		
		case '4':

		  if($value_total > $porcentaje_por_grupo->fiscal){
			$calc_score['score'] -= $porcentaje_por_grupo->fiscal;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
	  }
	}*/

	foreach($total_indirecto as $key_total => $value_total) {
	  switch($key_total) {
		case '1':
		  if($value_total > $porcentaje_por_grupo->judicial) {
			$total_indirecto[$key_total] = $porcentaje_por_grupo->judicial;
		  }
		  break;
		case '2':
		  if($value_total > $porcentaje_por_grupo->cheques){
			$total_indirecto[$key_total] = $porcentaje_por_grupo->cheques;
		  }
		  break;
		case '3':
		  if($value_total > $porcentaje_por_grupo->cendeu){
			$total_indirecto[$key_total] = $porcentaje_por_grupo->cendeu;
		  }
		  break;
		case '4':
		  if($value_total > $porcentaje_por_grupo->fiscal){
			$total_indirecto[$key_total] = $porcentaje_por_grupo->fiscal;
		  }
		  break;
	  }
	}

	if (self::$amerita_situacion_1) {
	  $calc_score = Misc::sumaPorSituacionUno($calc_score, self::$cantidad_situacion_1);
	}

	$total_indirecto = Misc::scorePorPreferencias($total_indirecto, $porcentaje_por_grupo, self::$suma_de_grupos, self::$porcentaje_por_grupo_afectado_por_preferencias, self::$score_contables);


	foreach ($total_indirecto as $key => $value) {
	  $calc_score['score'] -= $value;
	}

	return $calc_score;
  }
  
  public static function calcularScorePersonaFisica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$porcentaje_por_afectacion,$numero_cliente=''){
	$calc_score['score']                      = $score;
	$calc_score['afecta_directo']             = [];
	$calc_score['afecta_directo']['total']    = 0;
	$calc_score['afecta_directo']['debug']    = '';
	$calc_score['afecta_indirecto']           = [];
	$calc_score['afecta_indirecto']['debug']  = '';
	$total_indirecto                          = [];
	$ultima_fuente_cendeu  = SQLConnection::backendStoreProcedure('obtener_ultima_fuente',array('cendeu'),'selectOne'); 
   	$porcentaje_cheques_no_propios = 10;
	foreach($score_ordenado as $key_grupo => $score_grupo){
	  foreach($score_grupo as $key_codigo => $score_codigo){
		   if($key_codigo == 6 || $key_codigo == ''){continue;}

		foreach($score_codigo as $key_item => $score_item){
		  if($key_grupo == 2){
			foreach($score_item as $key_fecha => $score_fecha){
			  $datetime1 = new DateTime($score_fecha->fecha);
			  $datetime2 = new DateTime();
			  $interval = $datetime1->diff($datetime2);
			  $score_fecha->dias =  $interval->format('%a');
			  $cantidad = count($score_item);

			  foreach($tabla_score_con_cantidades[$key_grupo][$key_codigo] as $key_cantidades => $item_cantidades){

				if($score_fecha->codigo == $item_cantidades->codigo 
				  &&( $score_fecha->dias > $item_cantidades->dias_desde 
				  && $score_fecha->dias <=  $item_cantidades->dias_hasta) 
				  && ($cantidad  >= $item_cantidades->cant_desde 
				  && $cantidad  <= $item_cantidades->cant_hasta) 
				){

				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $cantidad;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad = $cantidad;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_fecha->dias;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->relacionado = $score_fecha->relacionado;
				}
			  }
			}
		  }else{
			$datetime1 = new DateTime($score_item->fecha);
			if($score_item->grupo == 3){
				$datetime2 = new DateTime($ultima_fuente_cendeu->fecha_informacion);
			}else{
				$datetime2 = new DateTime();
			}
			$interval = $datetime1->diff($datetime2);
			$score_item->dias =  $interval->format('%a');
			foreach($tabla_score_con_cantidades[$key_grupo][$key_codigo] as $key_cantidades => $item_cantidades){
			  if($key_grupo == 1 || $key_grupo == 3){
				if($score_item->codigo == $item_cantidades->codigo 
				  && $score_item->dias >= $item_cantidades->dias_desde 
				&& $score_item->dias <=  $item_cantidades->dias_hasta ){
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $score_item->cantidades;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad += 1;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_item->dias;
				}
			  }else if($key_grupo == 7 || $key_grupo == 8){

				if($score_item->codigo == $item_cantidades->codigo 
				  && $score_item->cantidades >= $item_cantidades->cant_desde 
				  && $score_item->cantidades <= $item_cantidades->cant_hasta){

				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidades = $score_item->cantidades;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->cantidad += 1;
				  $tabla_score_con_cantidades[$key_grupo][$key_codigo][$key_cantidades]->dias = $score_item->dias;
				}
			  }
			}
		  }
		}
	  }
	}

	foreach($tabla_score_con_cantidades as $key_grupo => $score_grupo){
	  foreach($score_grupo as $key_codigo => $score_codigo){
		 if($key_codigo == 6 || $key_codigo == ''){continue;}
		foreach($score_codigo as $key_item => $score_item){
			if($score_item->cantidad > 0 && $score_item->valor != 0){
			  if($score_item->afecta_directo == 1){
				
				/* porcentaje_cheques_no_propios */
				$aux_afectacion_porcentaje = $porcentaje_por_afectacion[1]->porcentaje;
				if($score_item->id_grupo == 2 && isset($score_item->relacionado) && ($score_item->relacionado != '')){
				  $score_item->valor = (($score_item->valor  / $porcentaje_cheques_no_propios) );
				}
				/* end of porcentaje_cheques_no_propios */

				$calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100));

				//$calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) ) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $score_item->cantidad. ' días '. $score_item->dias . ' valores '. $score_item->cantidades;
				$calc_score['afecta_directo']['debug'] =  "Le suma: " .($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) ) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $score_item->cantidad. ' días '. $score_item->dias . ' valores '. $score_item->cantidades;
			  }else if($score_item->afecta_directo == 0){

				/* porcentaje_cheques_no_propios */
				$aux_afectacion_porcentaje = $porcentaje_por_afectacion[0]->porcentaje;
				if($score_item->id_grupo == 2 && isset($score_item->relacionado) && ($score_item->relacionado != '')){
				  $score_item->valor = (($score_item->valor  / $porcentaje_cheques_no_propios) );
				 
				}
				/* end of porcentaje_cheques_no_propios */

				$calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) );
				$calc_score['afecta_indirecto']['debug'] =  "Le suma: " .($score_item->valor + ((($score_item->cantidad - 1) * ($score_item->valor/2))/100) ) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $score_item->cantidad. ' días '. $score_item->dias . ' valores '. $score_item->cantidades;
			  }
			}
		}
	  }
	}
	// Se suma el porcentaje solo una vez por cada variable definida en tabla score y solo en caso de situación 1 en todos los bancos.
	if (self::$amerita_situacion_1) {
	  /*foreach ($tabla_score_con_cantidades as $key_grupo => $score_grupo) {
		foreach($score_grupo as $key_codigo => $score_codigo) {
		  if ($key_codigo == 1){
			foreach ($score_codigo as $key_item => $score_item) {
			  $cantidad = 1;

			  if($cantidad > 0 && $score_item->valor != 0) {
				if($score_item->afecta_directo == 1) {
				  $calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

				  $calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				} elseif($score_item->afecta_directo == 0){
				  $calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
				  $calc_score['afecta_indirecto']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				}
			  }
			}
		  }
		}
	  }*/
	} else {
	  // Si existe un registro situación 10 en la tabla score será procesado con dicho valor cuando no sea situación 1 en todos los bancos y periodos.
	  foreach ($tabla_score_con_cantidades as $key_grupo => $score_grupo) {
		foreach($score_grupo as $key_codigo => $score_codigo) {
		  if ($key_codigo == 10){
			foreach ($score_codigo as $key_item => $score_item) {
			  $cantidad = 1;

			  if($cantidad > 0 && $score_item->valor != 0) {
				if($score_item->afecta_directo == 1) {
				  $calc_score['afecta_directo']['total'] +=  ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje);

				  $calc_score['afecta_directo']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[1]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				} elseif($score_item->afecta_directo == 0){
				  $calc_score['afecta_indirecto'][$key_grupo]['total'][] = -1 * ($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje);
				  $calc_score['afecta_indirecto']['debug'][] =  "Le suma: " .($score_item->valor + ((($cantidad - 1) * ($score_item->valor/2))/100) * $porcentaje_por_afectacion[0]->porcentaje) . " al grupo ".$score_item->id_grupo. " código: ".$score_item->codigo. " cantidad ". $cantidad;
				}
			  }
			}
		  }
		}
	  }
	}
	$calc_score['score'] += $calc_score['afecta_directo']['total'];
	foreach($calc_score['afecta_indirecto'] as $key_grupo => $score_grupo){
	  if($key_grupo=='debug'){continue;}
	  $total_indirecto[$key_grupo] = array_sum($score_grupo['total']);
	}
	
	/*
	foreach($total_indirecto as $key_total => $value_total){

	  switch($key_total){
		case '1':
		  if($value_total > $porcentaje_por_grupo->judicial){
			$calc_score['score'] -= $porcentaje_por_grupo->judicial;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
		case '2':

		  if($value_total > $porcentaje_por_grupo->cheques){
			$calc_score['score'] -= $porcentaje_por_grupo->cheques;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
		case '3':

		  if($value_total > $porcentaje_por_grupo->cendeu){
			$calc_score['score'] -= $porcentaje_por_grupo->cendeu;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
		
		case '4':

		  if($value_total > $porcentaje_por_grupo->fiscal){
			$calc_score['score'] -= $porcentaje_por_grupo->fiscal;
		  }else{
			$calc_score['score'] -= $value_total;
		  }
		  break;
	  }
	}
	*/

	foreach($total_indirecto as $key_total => $value_total) {
	  switch($key_total) {
		case '1':
		  if($value_total > $porcentaje_por_grupo->judicial) {
			$total_indirecto[$key_total] = $porcentaje_por_grupo->judicial;
		  }
		  break;
		case '2':
		  if($value_total > $porcentaje_por_grupo->cheques){
			$total_indirecto[$key_total] = $porcentaje_por_grupo->cheques;
		  }
		  break;
		case '3':
		  if($value_total > $porcentaje_por_grupo->cendeu){
			$total_indirecto[$key_total] = $porcentaje_por_grupo->cendeu;
		  }
		  break;
		case '4':
		  if($value_total > $porcentaje_por_grupo->fiscal){
			$total_indirecto[$key_total] = $porcentaje_por_grupo->fiscal;
		  }
		  break;
	  }
	}
	$total_indirecto = Misc::scorePorPreferencias($total_indirecto, $porcentaje_por_grupo, self::$suma_de_grupos, self::$porcentaje_por_grupo_afectado_por_preferencias, self::$score_contables);
	foreach ($total_indirecto as $key => $value) {
	  $calc_score['score'] -= $value;
	}
	if (self::$amerita_situacion_1) {
	  $calc_score = Misc::sumaPorSituacionUno($calc_score, self::$cantidad_situacion_1);
	}
	$calc_score = Misc::demeritarScorePorEdad($calc_score, self::$edad);
	$calc_score = Misc::demeritaSiCuitObservado($calc_score, self::$observado);
	$calc_score = Misc::ameritaPorEmpleo($calc_score, self::$cuit);
	return $calc_score;
  }
   public static function calcularScoreContable($respuesta,$item,$porcentaje_contable){
	
	if(!isset($respuesta['score'])){
	  $score = '';
	}else{
	  $score = $respuesta['score'];
	}

	if(empty($respuesta['afecta_indirecto']['debug']) || !array($respuesta['afecta_indirecto']['debug'])){
	  $respuesta['afecta_indirecto']['debug'] = [];
	}
   
	$demeritador = SQLConnection::CalcularScoreContable(
	5,
	$item->liquidez_corriente,
	$item->solvencia_patrimonial,
	$item->endeudamiento_corriente,
	$item->capital_de_trabajo_activo,
	$item->rentabilidad_bruta,
	$item->utilidad_neta
	);
	$res = 0;
	$liquidez_corriente       =0;
	$solvencia_patrimonial =0;
	$endeudamiento_corriente =0;
	$capital_de_trabajo_activo =0;
	$rentabilidad_bruta =0;
	$utilidad_neta =0;
	
	if($demeritador->liquidez_corriente != 0){
	  $liquidez_corriente += (($porcentaje_contable / 100 ) * 17.6/100 * ($demeritador->liquidez_corriente*10));
	  //echo(var_dump($respuesta['afecta_indirecto']['debug']));die();
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$liquidez_corriente.  " de 17.6  Liquidez Corriente , el valor sobre el puntaje que le dió fue: ".$demeritador->liquidez_corriente." para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$liquidez_corriente.  " de 17.6  Liquidez Corriente , el valor sobre el puntaje que le dió fue: ".$demeritador->liquidez_corriente." para el grupo 5 Contables";
	}
	if($demeritador->endeudamiento_corriente != 0){
	  $endeudamiento_corriente += (($porcentaje_contable / 100) * 16.2/100 * ($demeritador->endeudamiento_corriente*10));
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$endeudamiento_corriente. " de 16.2 endeudamiento_corriente  , el valor sobre el puntaje que le dió fue: ".$demeritador->endeudamiento_corriente."  para el grupo 5 Contables";
	  
	}
	if($demeritador->solvencia_patrimonial != 0){
	  $solvencia_patrimonial += (($porcentaje_contable / 100) * 22.6/100 * ($demeritador->solvencia_patrimonial*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$solvencia_patrimonial. " de 22.6 solvencia_patrimonial  , el valor sobre el puntaje que le dió fue: ".$demeritador->solvencia_patrimonial."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$solvencia_patrimonial. " de 22.6 solvencia_patrimonial  , el valor sobre el puntaje que le dió fue: ".$demeritador->solvencia_patrimonial."  para el grupo 5 Contables";
	}
  
	if($demeritador->capital_de_trabajo_activo != 0){
	  $capital_de_trabajo_activo += (($porcentaje_contable / 100) * 10.4/100 * ($demeritador->capital_de_trabajo_activo*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$capital_de_trabajo_activo. " de 10.4 capital_de_trabajo_activo  , el valor sobre el puntaje que le dió fue: ".$demeritador->capital_de_trabajo_activo."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$capital_de_trabajo_activo. " de 10.4 capital_de_trabajo_activo  , el valor sobre el puntaje que le dió fue: ".$demeritador->capital_de_trabajo_activo."  para el grupo 5 Contables";
	}
	if($demeritador->rentabilidad_bruta != 0){
	  $rentabilidad_bruta += (($porcentaje_contable / 100) * 8.8/100 * ($demeritador->rentabilidad_bruta*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$rentabilidad_bruta. " de 8.8 rentabilidad_bruta  , el valor sobre el puntaje que le dió fue: ".$demeritador->rentabilidad_bruta."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$rentabilidad_bruta. " de 8.8 rentabilidad_bruta  , el valor sobre el puntaje que le dió fue: ".$demeritador->rentabilidad_bruta."  para el grupo 5 Contables";
	}
	if($demeritador->utilidad_neta != 0){
	  $utilidad_neta += (($porcentaje_contable / 100) * 24.5/100 * ($demeritador->utilidad_neta*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$utilidad_neta. " de 24.5 utilidad_neta  , el valor sobre el puntaje que le dió fue: ".$demeritador->utilidad_neta."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$utilidad_neta. " de 24.5 utilidad_neta  , el valor sobre el puntaje que le dió fue: ".$demeritador->utilidad_neta."  para el grupo 5 Contables";
	}
	$res = $liquidez_corriente+$solvencia_patrimonial+$endeudamiento_corriente+$capital_de_trabajo_activo+$rentabilidad_bruta+$utilidad_neta;
	if($res > $porcentaje_contable){
	  $res = $porcentaje_contable;
	}
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma en total a Contables : ".$res);
	  $respuesta['afecta_indirecto']['debug'] = "Le suma en total a Contables : ".$res;
	$score += $res;
	$respuesta['score'] = $score;
	return $respuesta;
  }
  
    public static function calcularScoreAportes($respuesta=[]){

        $cuit = Request::input('cuit');
        if(!isset($respuesta['score'])){
            $score = '';
        }else{
            $score = $respuesta['score'];
        }
        $respuesta['afecta_directo']['debug'] = '<br>--';
        $respuesta['afecta_indirecto']['debug'] = '';
        $porcentaje = SQLConnection::backendStoreProcedure('mis_aportes_empresa_score',array($cuit),'selectOne');
        
        if (isset($porcentaje->score))
        {
            
            $respuesta['afecta_indirecto']['debug'] .= " - Afecta: " .  number_format($porcentaje->score,2) . "%";
            $score += ($score * $porcentaje->score / 100); 
            
        }
        $respuesta['afecta_indirecto']['debug'] .= '<br>Le aplica un ' . (number_format($porcentaje->score,2) ?? 0). '% al score'; 
        $respuesta['score'] = $score;
        return $respuesta;
        
    }

  public static function calcularScoreContable_v2($respuesta,$item,$porcentaje_contable){
	if(!isset($respuesta['score'])){
	  $score = 0;
	}else{
	  $score = $respuesta['score'];
	}

	if(empty($respuesta['afecta_indirecto']['debug']) || !array($respuesta['afecta_indirecto']['debug'])){
	  $respuesta['afecta_indirecto']['debug'] = [];
	}
   
	$demeritador = SQLConnection::CalcularScoreContable(
	5,
	$item->liquidez_corriente,
	$item->solvencia_patrimonial,
	$item->endeudamiento_corriente,
	$item->capital_de_trabajo_activo,
	$item->rentabilidad_bruta,
	$item->utilidad_neta
	);
	$res = 0;
	$liquidez_corriente       =0;
	$solvencia_patrimonial =0;
	$endeudamiento_corriente =0;
	$capital_de_trabajo_activo =0;
	$rentabilidad_bruta =0;
	$utilidad_neta =0;
	
	if($demeritador->liquidez_corriente != 0){
	  $liquidez_corriente += (($porcentaje_contable / 100 ) * 17.6/100 * ($demeritador->liquidez_corriente*10));
	  //echo(var_dump($respuesta['afecta_indirecto']['debug']));die();
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$liquidez_corriente.  " de 17.6  Liquidez Corriente , el valor sobre el puntaje que le dió fue: ".$demeritador->liquidez_corriente." para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$liquidez_corriente.  " de 17.6  Liquidez Corriente , el valor sobre el puntaje que le dió fue: ".$demeritador->liquidez_corriente." para el grupo 5 Contables";
	}
	if($demeritador->endeudamiento_corriente != 0){
	  $endeudamiento_corriente += (($porcentaje_contable / 100) * 16.2/100 * ($demeritador->endeudamiento_corriente*10));
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$endeudamiento_corriente. " de 16.2 endeudamiento_corriente  , el valor sobre el puntaje que le dió fue: ".$demeritador->endeudamiento_corriente."  para el grupo 5 Contables";
	  
	}
	if($demeritador->solvencia_patrimonial != 0){
	  $solvencia_patrimonial += (($porcentaje_contable / 100) * 22.6/100 * ($demeritador->solvencia_patrimonial*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$solvencia_patrimonial. " de 22.6 solvencia_patrimonial  , el valor sobre el puntaje que le dió fue: ".$demeritador->solvencia_patrimonial."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$solvencia_patrimonial. " de 22.6 solvencia_patrimonial  , el valor sobre el puntaje que le dió fue: ".$demeritador->solvencia_patrimonial."  para el grupo 5 Contables";
	}
  
	if($demeritador->capital_de_trabajo_activo != 0){
	  $capital_de_trabajo_activo += (($porcentaje_contable / 100) * 10.4/100 * ($demeritador->capital_de_trabajo_activo*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$capital_de_trabajo_activo. " de 10.4 capital_de_trabajo_activo  , el valor sobre el puntaje que le dió fue: ".$demeritador->capital_de_trabajo_activo."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$capital_de_trabajo_activo. " de 10.4 capital_de_trabajo_activo  , el valor sobre el puntaje que le dió fue: ".$demeritador->capital_de_trabajo_activo."  para el grupo 5 Contables";
	}
	if($demeritador->rentabilidad_bruta != 0){
	  $rentabilidad_bruta += (($porcentaje_contable / 100) * 8.8/100 * ($demeritador->rentabilidad_bruta*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$rentabilidad_bruta. " de 8.8 rentabilidad_bruta  , el valor sobre el puntaje que le dió fue: ".$demeritador->rentabilidad_bruta."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$rentabilidad_bruta. " de 8.8 rentabilidad_bruta  , el valor sobre el puntaje que le dió fue: ".$demeritador->rentabilidad_bruta."  para el grupo 5 Contables";
	}
	if($demeritador->utilidad_neta != 0){
	  $utilidad_neta += (($porcentaje_contable / 100) * 24.5/100 * ($demeritador->utilidad_neta*10));
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma " .$utilidad_neta. " de 24.5 utilidad_neta  , el valor sobre el puntaje que le dió fue: ".$demeritador->utilidad_neta."  para el grupo 5 Contables");
	  $respuesta['afecta_indirecto']['debug'] = "Le suma " .$utilidad_neta. " de 24.5 utilidad_neta  , el valor sobre el puntaje que le dió fue: ".$demeritador->utilidad_neta."  para el grupo 5 Contables";
	}
	$res = $liquidez_corriente+$solvencia_patrimonial+$endeudamiento_corriente+$capital_de_trabajo_activo+$rentabilidad_bruta+$utilidad_neta;
	if($res > $porcentaje_contable){
	  $res = $porcentaje_contable;
	}
	  //array_push($respuesta['afecta_indirecto']['debug'], "Le suma en total a Contables : ".$res);
	  $respuesta['afecta_indirecto']['debug'] = "Le suma en total a Contables : ".$res;
	$score += $res;
	$respuesta['score'] = $score;
	return $respuesta;
  }

// SAAS ------------------------------------------------------------------------------------------
// SAAS Clientes
  public static function insertClienteSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'INSERT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_cliente 			= 0; 
		$p_cliente  					= '2254875'; //$usuario->cliente['client_id'];
		$p_cliente_saas  			= Request::input('cliente_saas');
		$p_id_padron 					= Request::input('id_padron'); 
		$p_domicilio 					= trim(Request::input('domicilio'));
		$p_localidad  				= trim(Request::input('localidad'));
		$p_provincia  				= trim(Request::input('provincia'));
		$p_pais 							= trim(Request::input('pais'));
		$p_codpos 						= trim(Request::input('codpos'));
		$p_telefono 					= trim(Request::input('telefono'));
		$p_nombre_contacto  	=	trim(Request::input('nombre_contacto'));
		$p_email_contacto  		= trim(Request::input('email_contacto'));
		$p_telefono_contacto  = trim(Request::input('telefono_contacto'));
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_clave  						= trim(Request::input('clave'));
		$p_clave_temporal  		= trim(Request::input('clave_temporal'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo = 1; 

		$insert  = SQLConnection::backendStoreProcedure('SAAS_Clientes_',array($accion,$p_user_id,$p_saas_cliente,$p_cliente,$p_cliente_saas,$p_id_padron,$p_domicilio,$p_localidad,$p_provincia,$p_pais,$p_codpos,$p_telefono,$p_nombre_contacto,$p_email_contacto,$p_telefono_contacto,$p_datos_adicionales,$p_clave,$p_clave_temporal,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 

	  if($insert->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$insert->mensaje,'saas_cliente'=>'0']);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$insert->mensaje,'saas_cliente'=>$insert->saas_cliente]);
		  }
  }


  public static function updateClienteSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'UPDATE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_cliente 			= Request::input('saas_cliente'); 
		$p_cliente  					= '2254875'; //$usuario->cliente['client_id'];
		$p_cliente_saas  			= Request::input('cliente_saas');
		$p_id_padron 					= 0;
		$p_domicilio 					= trim(Request::input('domicilio'));
		$p_localidad  				= trim(Request::input('localidad'));
		$p_provincia  				= trim(Request::input('provincia'));
		$p_pais 							= trim(Request::input('pais'));
		$p_codpos 						= trim(Request::input('codpos'));
		$p_telefono 					= trim(Request::input('telefono'));
		$p_nombre_contacto  	=	trim(Request::input('nombre_contacto'));
		$p_email_contacto  		= trim(Request::input('email_contacto'));
		$p_telefono_contacto  = trim(Request::input('telefono_contacto'));
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_clave  						= trim(Request::input('clave'));
		$p_clave_temporal  		= trim(Request::input('clave_temporal'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo   		 			= Request::input('activo'); 

		$update  = SQLConnection::backendStoreProcedure('SAAS_Clientes_',array($accion,$p_user_id,$p_saas_cliente,$p_cliente,$p_cliente_saas,$p_id_padron,$p_domicilio,$p_localidad,$p_provincia,$p_pais,$p_codpos,$p_telefono,$p_nombre_contacto,$p_email_contacto,$p_telefono_contacto,$p_datos_adicionales,$p_clave,$p_clave_temporal,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 
	   
	  if($update->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$update->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$update->mensaje]);
		  }
  }

  public static function deleteClienteSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'DELETE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_cliente 			= Request::input('saas_cliente'); 

		$delete  = SQLConnection::backendStoreProcedure('SAAS_Clientes_',array($accion,$p_user_id,$p_saas_cliente),'selectOne');
	   
	  if($delete->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$delete->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$delete->mensaje]);
		  }
  }

  public static function selectClienteSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_cliente 			= Request::input('saas_cliente'); 

		$select  = SQLConnection::backendStoreProcedure('SAAS_Clientes_',array($accion,$p_user_id,$p_saas_cliente),'selectOne');
	  return json_encode($select);
  }

  public static function selectAllClienteSaas(){

		$accion  = 'SELECTALL'; 

		$select  = SQLConnection::backendStoreProcedure('SAAS_Clientes_',array($accion),'select');
	  return json_encode($select);
  }

  // SAAS - Usuarios

	public static function insertUsuarioSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'INSERT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario 			= 0; 
		$p_saas_cliente  			= Request::input('saas_cliente');
		$p_username 					= Request::input('username'); 
		$p_sector 						= trim(Request::input('sector'));
		$p_nombre  						=	trim(Request::input('nombre'));
		$p_email  						=	trim(Request::input('email'));
		$p_telefono  					= trim(Request::input('telefono'));
		$p_clave  						= trim(Request::input('clave'));
		$p_clave_temporal  		= trim(Request::input('clave_temporal'));
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo = 1; 

		$insert  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_',array($accion,$p_user_id,$p_saas_usuario,$p_saas_cliente,$p_username,$p_sector,$p_nombre,$p_email,$p_telefono,$p_clave,$p_clave_temporal,$p_datos_adicionales,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 

	  if($insert->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$insert->mensaje,'saas_usuario'=>'0']);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$insert->mensaje,'saas_usuario'=>$insert->saas_usuario]);
		  }
  }

  public static function updateUsuarioSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'UPDATE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario 			= Request::input('saas_usuario');
		$p_saas_cliente  			= Request::input('saas_cliente');
		$p_username 					= Request::input('username'); 
		$p_sector 						= trim(Request::input('sector'));
		$p_nombre  						=	trim(Request::input('nombre'));
		$p_email  						=	trim(Request::input('email'));
		$p_telefono  					= trim(Request::input('telefono'));
		$p_clave  						= trim(Request::input('clave'));
		$p_clave_temporal  		= trim(Request::input('clave_temporal'));
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo  						= trim(Request::input('activo'));

		$update  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_',array($accion,$p_user_id,$p_saas_usuario,$p_saas_cliente,$p_username,$p_sector,$p_nombre,$p_email,$p_telefono,$p_clave,$p_clave_temporal,$p_datos_adicionales,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 

	  if($update->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$update->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$update->mensaje]);
		  }
  }

   public static function deleteUsuarioSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'DELETE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario 			= Request::input('saas_usuario'); 

		$delete  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_',array($accion,$p_user_id,$p_saas_usuario),'selectOne');
	   
	  if($delete->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$delete->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$delete->mensaje]);
		  }
  }

  public static function selectUsuarioSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario 			= Request::input('saas_usuario'); 

		$select  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_',array($accion,$p_user_id,$p_saas_usuario),'selectOne');
	  return json_encode($select);
  }

  public static function selectAllUsuarioSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECTALL';
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario 			= '0'; 
		$p_saas_cliente  			= Request::input('saas_cliente');
		$select  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_',array($accion,$p_user_id,$p_saas_usuario,$p_saas_cliente),'select');
	  return json_encode($select);
  }

  // SAAS - Contratos

	public static function insertContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'INSERT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_contrato 			= 0; 
		$p_saas_cliente  			= Request::input('saas_cliente');
		$p_nro_contrato  			= trim(Request::input('nro_contrato'));
		$p_nro_poliza  				= trim(Request::input('nro_poliza'));
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo = 1; 

		$insert  = SQLConnection::backendStoreProcedure('SAAS_Contratos_',array($accion,$p_user_id,$p_saas_contrato,$p_saas_cliente,$p_nro_contrato,$p_nro_poliza,$p_datos_adicionales,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 

	  if($insert->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$insert->mensaje,'sass_contrato'=>'0']);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$insert->mensaje,'sass_contrato'=>$insert->saas_contrato]);
		  }
  }

  public static function updateContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'UPDATE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_contrato 			= Request::input('saas_contrato');
		$p_saas_cliente  			= Request::input('saas_cliente');
		$p_nro_contrato  			= trim(Request::input('nro_contrato'));
		$p_nro_poliza  				= trim(Request::input('nro_poliza'));
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo = Request::input('activo'); 

		$update  = SQLConnection::backendStoreProcedure('SAAS_Contratos_',array($accion,$p_user_id,$p_saas_contrato,$p_saas_cliente,$p_nro_contrato,$p_nro_poliza,$p_datos_adicionales,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 

	  if($update->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$update->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$update->mensaje]);
		  }
  }

   public static function deleteContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'DELETE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_contrato 			= Request::input('saas_contrato');

		$delete  = SQLConnection::backendStoreProcedure('SAAS_Contratos_',array($accion,$p_user_id,$p_saas_contrato),'selectOne');
	   
	  if($delete->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$delete->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$delete->mensaje]);
		  }
  }

  public static function selectContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_contrato 			= Request::input('saas_contrato');

		$select  = SQLConnection::backendStoreProcedure('SAAS_Contratos_',array($accion,$p_user_id,$p_saas_contrato),'selectOne');
	  return json_encode($select);
  }

  public static function selectAllContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECTALL';
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_contrato 			= '0'; 
		$p_saas_cliente  			= Request::input('saas_cliente');
		$select  = SQLConnection::backendStoreProcedure('SAAS_Contratos_',array($accion,$p_user_id,$p_saas_contrato,$p_saas_cliente),'select');
	  return json_encode($select);
  }


// SAAS - Usuarios_Contratos

	public static function insertUsuarioContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'INSERT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario_contrato = 0; 
		$p_saas_cliente  			= Request::input('saas_cliente');
		$p_saas_usuario  			= Request::input('saas_usuario');
		$p_saas_contrato 			= Request::input('saas_contrato');
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo = 1; 


		$insert  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_',array($accion,$p_user_id,$p_saas_usuario_contrato,$p_saas_cliente,$p_saas_usuario,$p_saas_contrato,$p_datos_adicionales,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 

	  if($insert->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$insert->mensaje,'sass_usuario_contrato'=>'0']);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$insert->mensaje,'sass_contrato'=>$insert->saas_usuario_contrato]);
		  }
  }

  public static function updateUsuarioContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion	   						= 'UPDATE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario_contrato = Request::input('saas_usuario_contrato');
		$p_saas_cliente  			= Request::input('saas_cliente');
		$p_saas_usuario  			= Request::input('saas_usuario');
		$p_saas_contrato 			= Request::input('saas_contrato');
		$p_datos_adicionales  = trim(Request::input('datos_adicionales'));
		$p_vigencia_desde  		= trim(Request::input('vigencia_desde'));
		$p_vigencia_hasta  		= trim(Request::input('vigencia_hasta'));
		$p_activo = Request::input('activo'); 

		$update  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_',array($accion,$p_user_id,$p_saas_usuario_contrato,$p_saas_cliente,$p_saas_usuario,$p_saas_contrato,$p_datos_adicionales,$p_vigencia_desde,$p_vigencia_hasta,$p_activo),'selectOne'); 

	  if($update->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$update->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$update->mensaje]);
		  }
  }

   public static function deleteUsuarioContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'DELETE'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario_contrato 			= Request::input('saas_usuario_contrato');

		$delete  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_',array($accion,$p_user_id,$p_saas_usuario_contrato),'selectOne');
	   
	  if($delete->error == '1')
			{
			return json_encode(['Status'=>'ERROR','StatusCode'=>1,'mensaje'=>$delete->mensaje]);
		  }
		  else 
		  {
			return json_encode([
			  'Status'=>'OK','StatusCode'=>0,'mensaje'=>$delete->mensaje]);
		  }
  }

  public static function selectUsuarioContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECT'; 
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario_contrato 			= Request::input('saas_usuario_contrato');

		$select  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_',array($accion,$p_user_id,$p_saas_usuario_contrato),'selectOne');
	  return json_encode($select);
  }

  public static function selectAllUsuarioContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECTALL';
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario_contrato 			= '0'; 
		$p_saas_cliente  			= Request::input('saas_cliente');
		$select  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_',array($accion,$p_user_id,$p_saas_usuario_contrato,$p_saas_cliente),'select');
	  return json_encode($select);
  }

  public static function selectAllUsuarioContratoXContratoSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECTALL-CONTRATO';
		$p_user_id 						= '94437923'; //$usuario->user_id;
		$p_saas_usuario_contrato = '0'; 
		$p_saas_cliente  			= '0';
		$p_saas_usuario 			= '0'; 
		$p_saas_contrato 			= Request::input('saas_contrato');

		$select  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_',array($accion,$p_user_id,$p_saas_usuario_contrato,$p_saas_cliente,$p_saas_usuario,$p_saas_contrato),'select');
	  return json_encode($select);
  }

   public static function selectAllUsuarioContratoXUsuarioSaas(){
		//$usuario = Session::get('usuario');
		$accion   						= 'SELECTALL-USUARIO';
		$p_user_id 						= Request::input('user_id');
		$p_saas_usuario_contrato 			= '0'; 
		$p_saas_cliente  			= Request::input('saas_cliente');
		$p_saas_usuario 			= Request::input('saas_usuario');
		$p_saas_contrato 			= '0';

		$select  = SQLConnection::backendStoreProcedure('SAAS_Usuarios_Contratos_',array($accion,$p_user_id,$p_saas_usuario_contrato,$p_saas_cliente,$p_saas_usuario,$p_saas_contrato),'select');
		
	  return json_encode($select);
  }

	public static function consultaCUITSaas(){
		//$usuario = Session::get('usuario');
		$p_user_id 							 = '94437923'; //$usuario->user_id;
		$p_saas_usuario_contrato = Request::input('saas_usuario_contrato');
		$p_cuit  								 = Request::input('cuit');
		$p_id_padron 						 = '0';
		$p_familia 							 = Request::input('familia');
		// Calculo Score de Balance para el CUIT
		$scb = 100; 
		$apikey = env('API_KEY');
		/* 22/07/2021 Agregamos que pase por afip */
		if(!empty($p_cuit) && strlen($p_cuit) == 11){
			AFIPController::obtenerPadron($p_cuit,true,'AR',false);
		}
				
		$params = 'apikey=' . $apikey . '&cuit=' . $p_cuit;
		$balance = self::CURLCall(env('API_SCORE_BALANCE'), $params);
		if (!empty($balance)) {
			$bal = json_decode($balance);
			if (isset($bal->score)) {
				$scb = ($bal->score >= 0) ? round($bal->score, 1) : 0;
			}
		}

		$select  = SQLConnection::backendStoreProcedure('SAAS_Consulta_CUIT',array($p_user_id,$p_saas_usuario_contrato,$p_cuit,$p_id_padron,$p_familia, $scb),'selectOne');
	    return json_encode($select);
  }

   public static function verificaCuitSaas(){
	//$usuario = Session::get('usuario');
	$p_user_id               = '94437923'; //$usuario->user_id;
	$p_saas_usuario_contrato = Request::input('saas_usuario_contrato');
	$p_cuit                  = Request::input('cuit');
	/* 22/07/2021 Agregamos que pase por afip */
	if(!empty($p_cuit) && strlen($p_cuit) == 11){
		AFIPController::obtenerPadron($p_cuit,true,'AR',false);
	}
	$p_id_padron             = '0';
	$select  = SQLConnection::backendStoreProcedure('SAAS_Verifica_CUIT',array($p_user_id,$p_saas_usuario_contrato,$p_cuit,$p_id_padron),'selectOne');
	return json_encode($select);
  }

  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;
		}
	}

		//Insertar edictos bulk luego de ser extraídos de los PDF. Estos edictos luego se procesan con el sistema de EdictosAI antes de llegar a la base de datos
	//final de Fidelitas
	public static function alta_edictos_txt_AI0($region,$texto,$fecha_boletin){
		$user_id  = Session::get('usuario');
		$actiondb='ALTA';
		$titulo='null';
		$resp = SQLConnection::backendStoreProcedure('carga_edictos_AI',array($actiondb,$region,$titulo,$texto,$fecha_boletin,$userid),'selectOne');
		return $resp; 
	}
	/*
	public static function alta_edictos_txt_AI($region,$texto,$fecha_boletin){
		$user_id  = Session::get('usuario');
		$actiondb='ALTA';
		$titulo='null';
		$resp = SQLConnection::backendStoreProcedure('carga_edictos_AI',array($actiondb,$region,$titulo,$texto,$fecha_boletin,$userid),'selectOne');
		return $resp; 
	}
	*/
	public static function alta_edictos_txt_AI(){
		$region = Request::input('region');
		$texto = Request::input('texto');
		$fecha_boletin =Request::input('fecha_boletin');
		$grupo =Request::input('grupo');
		$actiondb='ALTA';
		$titulo=null;
		$usuario = Session::get('usuario');
		$user_id = $usuario->user_id;
		$resp = SQLConnection::backendStoreProcedure('carga_edictos_AI',array($actiondb,$region,$titulo,$texto,$fecha_boletin,$user_id,1,null,null,$grupo),'selectOne');
		return json_encode(['Response'=>[$resp]]);
}

	//Dado un ID de la tala led_docs se le actualiza el campo cuit_found con el contenido de cuit que se lea dentro de ese PDF
	public static function imperiumextraercuit()
	{
		//$user_id  = Session::get('usuario');
		//$actiondb='ALTA';
		//$titulo='null';
		//$user_id  = 15342812;
		$dbid 		= Request::input('dbid');
		$listacuit 		= Request::input('listacuit');
		$updlistacuit = 'UPDLISTACUIT';
		$resp = SQLConnection::backendStoreProcedure('Imperium_pdf_read',array($updlistacuit,$dbid,$listacuit),'selectOne');
		//var_dump($resp);
		return $listacuit;//$resp; 
	}


	public function htmlToPdf(){
		$file_path 		= Request::input('file_path');
		$file_name 		= Request::input('file_name');
		$file_content 	= utf8_decode(Request::input('file_content'));

		$local_file_name		='/var/www/html/fidelitas2/public/documentos/temp/pepe.html';
		file_put_contents($local_file_name,$file_content);
		if ( ! file_exists( $file_path ) ) {
			mkdir( $file_path, 0777, true );
		}
		chmod($local_file_name, 0777);
		exec("/usr/local/bin/wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --header-font-size 8 --header-right ' [page] de [toPage]'  --viewport-size 1920x1080 --zoom 1 ".$local_file_name." ".$file_path.$file_name);
		
	}
	public static function valida_la_padrones(){
                $usuario        = Session::get('usuario');
                $user_id        = $usuario->user_id;
                //$client_id      = Request::input('client_id');
                $client_id      = '2982720';// '1811919445';
                $lastName       = trim(Request::input('last_name'));
                $firstName      = trim(Request::input('first_name'));
                $country                = trim(Request::input('country_code'));
                $producto       = $usuario->producto ?? 83;
                
                // transaccionar el nombre buscado porque se busca por texto en este producto
                self::consumir_servicio($client_id,$producto);
                //SQLConnection::consumirServicio($user_id,$client_id,68);

                if(empty($client_id)){
                        return json_encode([
                                'Status'=>'ERROR','Message'=>'INVALID CLIENT','Response'=>[]
                        ]);
                }
                $exec = SQLConnection::backendStoreProcedure('peru_worldsys_data',array($lastName,$firstName,$country));
                return json_encode([
                'Status'=>'OK','Message'=>'OK','Response'=>$exec
                ]);
        }

	function make_dir( $path, $permissions = 0777 ) {
		return is_dir( $path ) || mkdir( $path, $permissions, true );
	}

	public static function eliminar_acentos($cadena){
		//Reemplazamos la A y a
		$cadena = str_replace(
		array('Á', 'À', 'Â', 'Ä', 'á', 'à', 'ä', 'â', 'ª'),
		array('A', 'A', 'A', 'A', 'a', 'a', 'a', 'a', 'a'),
		$cadena
		);
 
		//Reemplazamos la E y e
		$cadena = str_replace(
		array('É', 'È', 'Ê', 'Ë', 'é', 'è', 'ë', 'ê'),
		array('E', 'E', 'E', 'E', 'e', 'e', 'e', 'e'),
		$cadena );
 
		//Reemplazamos la I y i
		$cadena = str_replace(
		array('Í', 'Ì', 'Ï', 'Î', 'í', 'ì', 'ï', 'î'),
		array('I', 'I', 'I', 'I', 'i', 'i', 'i', 'i'),
		$cadena );
 
		//Reemplazamos la O y o
		$cadena = str_replace(
		array('Ó', 'Ò', 'Ö', 'Ô', 'ó', 'ò', 'ö', 'ô'),
		array('O', 'O', 'O', 'O', 'o', 'o', 'o', 'o'),
		$cadena );
 
		//Reemplazamos la U y u
		$cadena = str_replace(
		array('Ú', 'Ù', 'Û', 'Ü', 'ú', 'ù', 'ü', 'û'),
		array('U', 'U', 'U', 'U', 'u', 'u', 'u', 'u'),
		$cadena );
		
		return $cadena;
	}

	public static function validacionLote(){
	
		$entradas = SQLConnection::backendStoreProcedure('sp_id_validacion_entrada',array(),'select');	
		foreach ($entradas as $key => $entrada) {
			$entrada->name    = self::eliminar_acentos($entrada->name);
			$entrada->surname = self::eliminar_acentos($entrada->surname);
			$entrada->address = self::eliminar_acentos($entrada->address);
			$entrada->city    = self::eliminar_acentos($entrada->city);
			$entrada->state   = self::eliminar_acentos($entrada->state);
			
			$entrada->name    = strtoupper(str_replace('ñ','Ñ',$entrada->name));
			$entrada->surname = strtoupper(str_replace('ñ','Ñ',$entrada->surname));
			$entrada->address = strtoupper(str_replace('ñ','Ñ',$entrada->address));
			$entrada->city    = strtoupper(str_replace('ñ','Ñ',$entrada->city));
			$entrada->state   = strtoupper(str_replace('ñ','Ñ',$entrada->state));
			$entrada->cp      = strtoupper($entrada->cp);
			$entrada->email   = strtoupper($entrada->email);

			$enviados['ID'] 		= $entrada->ID;

			$nom = '';
			$nom = $entrada->name ?? '';
			$enviados['name'] = str_replace("'", " ", $nom);
			$ape = '';
			$ape = $entrada->surname ?? '';
			$enviados['surname']  = str_replace("'", " ", $ape);
		
			$enviados['dni'] 		= $entrada->dni ?? null;
			$enviados['tax_id'] 	= $entrada->tax_id ?? null;
			$enviados['birthdate'] 	= $entrada->birthdate;
			$enviados['address'] 	= $entrada->address;
			$enviados['city'] 		= $entrada->city;
			$enviados['state'] 		= $entrada->state;
			$enviados['cp'] 		= $entrada->cp;
			$enviados['telephone'] 	= $entrada->telephone;
			$enviados['email'] 	    = $entrada->email;
			
			if (strlen($entrada->dni)==11) {
				$entrada->tax_id = $entrada->dni; 
				$entrada->dni = null; 
			}

			// Si no mandan el tax-id, lo buscamos con el sp api_validacion_dni_cuit
			if (empty($entrada->tax_id)) {
				$nombre = $enviados['surname']  .  ' ' .  $enviados['name'] ; 
				$nombre_contains= '';
				if($nombre){
			  	$nombre_contains= Misc::parsearBusquedaPadron($nombre);
				}
				$validacion = SQLConnection::backendStoreProcedure('api_validacion_dni_cuit',array($entrada->dni,$nombre,$nombre_contains),false);
				$entrada->tax_id = $validacion[0]->cuit_buscado; 
			}
			$taxid_dni = $entrada->tax_id ?? $entrada->dni;
			if(strlen($taxid_dni) == 11){
				AFIPController::obtenerPadron($taxid_dni,true,'AR',false);
			}
			$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array('','',$enviados['name'],$enviados['surname'],$entrada->birthdate),'select');			

			$result = [];
			$encontrados = 0; 
			
			foreach($datos as $key => $persona){
				$encontrados += 1; 
				$info = SQLConnection::backendStoreProcedure('[sp_procesos_cuit_enrichment_api_datos]',array(1,$persona->cuit),'selectOne');	
				$nombres = $persona->nombres; 
				$apellidos = $persona->apellidos; 

				$name_validation = self::validacionNombre($enviados, $persona);
				$surname_validation = self::validacionApellido($enviados, $persona);
				$localidad = '';
				$provincia = '';
				$pais = '';
				$address_validation = 'FALSE';
				$city_validation = 'FALSE';
				$state_validation = 'FALSE';
				$cp_validation = 'FALSE';
				$full_address = explode(',',$enviados['address']);

				$address_contains = explode(' ',$enviados['address']);
				foreach($address_contains as $address_value){
					if(stripos($info->domicilio,$address_value) !== false){
						$address_validation = 'TRUE';
						$info->domicilio = str_ireplace($address_value,'',$info->domicilio);
					}else{
						$address_validation = 'FALSE';
						break;
					}
				}
		
				$localidad 	= $enviados['city'] ?? '';
				$provincia 	= $enviados['state'] ?? '';
				$cp 	    = $enviados['cp'] ?? '';
				$pais 		= 'ARGENTINA';
				if($info->provicia == 'CIUDAD AUTONOMA BUENOS AIRES' || $info->provicia == 'CIUDAD DE BUENOS AIRES' || $info->provicia == 'CIUDAD AUTONOMA DE BUENOS AIRES'){
					$info->provicia  = 'CIUDAD AUTONOMA DE BUENOS AIRES';
					$info->localidad = 'CIUDAD AUTONOMA DE BUENOS AIRES';
				}

				if($info->provicia == $provincia && trim($provincia) !== '') {
					$state_validation = 'TRUE';
				}else if(stripos(trim($provincia),$info->provicia) !== false || stripos(trim($info->provicia),$provincia) !== false ) { 
					$state_validation = 'PARTIALLY TRUE'; 
				} else {
					$state_validation = 'FALSE';
				}

				if ($info->localidad == 'CIUDAD AUTONOMA DE BUENOS AIRES' && trim($localidad) == 'CABA'){
					$city_validation = 'TRUE';
				} else if ($info->localidad == $localidad && trim($localidad) !== '') {
					$city_validation = 'TRUE';
				}else if(stripos(trim($localidad),$info->localidad) !== false || stripos(trim($info->localidad),$localidad) !== false) { 
					$city_validation = 'PARTIALLY TRUE'; 
				} else { 
					$city_validation = 'FALSE'; 
				}

			    if ($info->codpos == $cp && trim($cp) !== '') {
					$cp_validation = 'TRUE';
				} else {
					$cp_validation = 'FALSE';
				}

				$birthdate_validation = 'FALSE';
				if($enviados['birthdate'] == $persona->fecha_nacimiento && trim($enviados['birthdate']) !== ''){
					$birthdate_validation = 'TRUE';
				}
				
				$dni_validation = 'FALSE';
				if($enviados['dni'] == $persona->dni && trim($enviados['dni']) !== '') {
					$dni_validation = 'TRUE';
				}
				
				$tax_id_validation = 'FALSE';
				if($enviados['tax_id'] == $persona->cuit && trim($enviados['tax_id']) !== ''){
					$tax_id_validation = 'TRUE';
				}
				
				$telephone_validation = 'FALSE';
				$telephone_contains = explode(' /',$info->telefonos);
				foreach ($telephone_contains as $key2 => $value) {
					if($value == $enviados['telephone'] && $value !== '') {
						$telephone_validation = 'TRUE';
					}else if(stripos(trim($value),$enviados['telephone']) !== false || stripos('11'.trim($value),$enviados['telephone']) !== false){
						$telephone_validation = 'PARTIALLY TRUE'; 
					}else{
						$telephone_validation = 'FALSE';
					}
				}
				
			    $email_validation = 'FALSE';
				$result[$key] = new \StdClass();
				$result[$key]->dni				= $dni_validation;
				$result[$key]->tax_id			= $tax_id_validation;
				$result[$key]->birthdate		= $birthdate_validation;
				$result[$key]->name				= $name_validation;
				$result[$key]->surname			= $surname_validation;
				$result[$key]->deceased 		= ($persona->fecha_fallecimiento != '')  ? 'TRUE': 'FALSE';
				$result[$key]->address			= $address_validation;
				$result[$key]->city			    = $city_validation;
				$result[$key]->state			= $state_validation;
				$result[$key]->cp			    = $cp_validation;
				$result[$key]->email			= $email_validation;
				$result[$key]->telephone		= $telephone_validation;
				$result[$key]->ID 		        = $entrada->ID;

			}
 

			$resultado = []; 
			// Si hay muchos, elige el que tiene mas campos TRUE o PARTIALLY TRUE 
			if ($encontrados <= 1 ) {
				$resultado = $result; 
			} else {
				$mas_iguales = 0; 
				$mas_iguales_key = 0; 
				foreach ($result as $key2 => $value) {
					$cant_iguales = 0; 
					if ($value->dni	== 'TRUE' || $value->dni == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->tax_id == 'TRUE' || $value->tax_id == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->birthdate == 'TRUE' || $value->birthdate == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->name == 'TRUE' || $value->name == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->surname	== 'TRUE' || $value->surname == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->address == 'TRUE' || $value->address == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->city == 'TRUE' || $value->city == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->state == 'TRUE' || $value->state == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->cp == 'TRUE' || $value->cp == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->address == 'TRUE' || $value->address == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($value->telephone == 'TRUE' || $value->telephone == 'PARTIALLY TRUE')  { $cant_iguales += 1; }
					if ($cant_iguales > $mas_iguales)  {
						$mas_iguales = $cant_iguales; 
						$mas_iguales_key = $key2; 
					}
				}
				$resultado[0] = $result[$mas_iguales_key]; 
			}

			$update = []; 
			if (count($resultado)>0) {
				$update[] = $resultado[0]->dni;
				$update[] = $resultado[0]->tax_id;
				$update[] = $resultado[0]->birthdate;
				$update[] = $resultado[0]->name;
				$update[] = $resultado[0]->surname;
				$update[] = $resultado[0]->deceased;
				$update[] = $resultado[0]->address;
				$update[] = $resultado[0]->city;
				$update[] = $resultado[0]->state;
				$update[] = $resultado[0]->cp;
				$update[] = $resultado[0]->email;
				$update[] = $resultado[0]->telephone;
				$update[] = $resultado[0]->ID; 
			} else  {
				$update = [];
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = 'FALSE';
				$update[] = $entrada->ID; 
			}
			$salida = SQLConnection::backendStoreProcedure('sp_id_validacion_salida',$update,'selectOne');
		}
	}


	public static function apiBcra(){
		$usuario  = Session::get('usuario');
		$user_id  = $usuario->user_id;
		$cliente  = $usuario->cliente['client_id'];
		$tax_id   = trim(Request::input('tax_id'));

		if(empty($tax_id))
		{
			return json_encode([
				'Status'=>'ERROR','Message'=>'TAX_ID CANNOT BE NULL','Response'=>[]
			]);
		}		

		$producto = $usuario->producto ?? 87; 
		self::consumir_servicio($tax_id,$producto); 
	
		if(strlen($tax_id) == 11){
			AFIPController::obtenerPadron($tax_id,true,'AR',false);
		}
		else 
		{
			return json_encode([
				'Status'=>'ERROR','Message'=>'TAX_ID ERROR','Response'=>[]
			]);
		}
	
		$datos = SQLConnection::backendStoreProcedure('API_BCRA',array($cliente,$tax_id),'select');	
		//var_dump($datos); die(); 
		$result = [];
		foreach($datos as $key => $persona){
		
			$result[0][$persona->nodo] = new \StdClass();
			$result[0][$persona->nodo]->valor = $persona->valor;
			$result[0][$persona->nodo]->detalle = $persona->detalle;
			
		}
		return json_encode([
			 'Status'=>'OK','Message'=>'OK','Response'=>$result
		]);

	}


	//-- Nueva version mejorada govcheck_v2
	public static function govcheck_v2() {
		$usuario        = Session::get('usuario');
		//-- Validamos que el usuario tenga el producto habilitado
		if($usuario->producto == env('NRO_PRODUCTO_GOVCHECK')) {
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));

			//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
			if(empty($dni) || Misc::noEsPosibleDni($dni)) {
				return json_encode(['Parameters'=>$dni,'Status'=>'ERROR','Message'=>'El campo dni no puede estar vacío y debe ser un número de 8 dígitos','Response'=>[]]);
			}

			try {
			
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['National_id'] = $dni;
				$res2 = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select');
				if(count($res2) > 0) {
					$response = Misc::conversorApisGovcheck($res2);
				} else {
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_GOVCHECK'))->transaction_id;
					return json_encode(['Status'=>'ERROR','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
				}

				try {
					$tid = (!is_null($response[0]->Tax_id_number)) ? $response[0]->Tax_id_number : $dni;
					$id_consumo = self::consumir_servicio($tid,env('NRO_PRODUCTO_GOVCHECK'))->transaction_id;
					return json_encode(['Parameters'=>$enviados, 'Results'=>count($response), 'Notification'=>Misc::gestorNotificacionGovcheck($response), 'Response'=>$response, 'Transaction_id'=>$id_consumo]);	
				
				} catch (\Throwable $th) {
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_GOVCHECK'))->transaction_id;
					$mensaje = 'API GOVCHECK_V2 fidelitas-www - MIRAR ESTE CASO - DNI consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
					Misc::enviarMail_errores_api($mensaje);
					return json_encode(['Status'=>'ERROR','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
				}
				

			} catch (\Throwable $th) {
				
				$mensaje = 'Error al consultar API GOVCHECK_V2 fidelitas-www - DNI consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'TIMEOUT EXCEEDED.']);

			}

			
		}
		return json_encode(['Response'=>'No posee acceso al producto.']);
	}

	public static function extended_v2() {
		$usuario        = Session::get('usuario');
		$res_renaper = null;
		//-- Validamos que el usuario tenga el producto habilitado
		if($usuario->producto == env('NRO_PRODUCTO_EXTENDED')) {
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));
			//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
			if(empty($dni) || Misc::noEsPosibleDni($dni)) {
				return json_encode(['Parameters'=>$dni,'Status'=>'ERROR','Message'=>'El campo NATIONAL_ID no puede estar vacío y debe ser un número de 8 dígitos','Response'=>[]]);
			}

			try {
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['National_id'] = $dni;
				
				$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select');
				try {
					//$tid = (!is_null($response[0]->identificacion)) ? $response[0]->identificacion : $dni;
					if(count($response) == 0) {
						$tid = $dni;
						$res_renaper = self::tratamientoRenaperExtend_v2($dni);
					} else {
						$tid = $response[0]->identificacion;
						$res_renaper = self::tratamientoRenaperExtend($response[0]->ultimo_renaper, $dni, $response[0]->genero, $response[0]->identificacion);
					}
					$id_consumo = self::consumir_servicio($tid,env('NRO_PRODUCTO_EXTENDED'))->transaction_id;
					//-- Validamos que solo tengamos un solo registro o no este vacio ni fallecido
					if(count($response) == 0 && is_null($res_renaper)) {
						$response_v2 = Misc::conversorApisExtended_vacio();
						return json_encode(['parameters'=>$enviados, 'results'=>count($response), 'notification'=>Misc::gestorNotificacionGovcheck_v2($response, 0), 'response'=>$response_v2, 'Transaction_id'=>$id_consumo]);	
					}
					
					if(count($response) == 0) {
						$res_ws = self::resFidecheckExtend($dni, $res_renaper->apellido.' '.$res_renaper->nombres, $dni);
						$response_v2 = Misc::conversorApisExtended_v2($res_renaper, $res_renaper, $res_ws);
					} else {
						$res_ws = self::resFidecheckExtend($response[0]->dni, $response[0]->nombre_persona, $response[0]->identificacion);
						$response_v2 = Misc::conversorApisExtended($response, $res_renaper, $res_ws);
					}
					
					return json_encode(['parameters'=>$enviados, 'results'=>count($response), 'notification'=>Misc::gestorNotificacionGovcheck($response), 'response'=>$response_v2, 'Transaction_id'=>$id_consumo]);
				
				} catch (\Throwable $th) {
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_EXTENDED'))->transaction_id;
					$mensaje = 'Ver este caso API EXTENDED_V2 fidelitas-www - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
					Misc::enviarMail_errores_api($mensaje);
					return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
				}
				

			} catch (\Throwable $th) {
				$mensaje = 'Error al consultar API EXTENDED_V2 fidelitas-www - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'TIMEOUT EXCEEDED.']);

			}
			
		}

		return json_encode(['response'=>'No posee acceso al producto.']);
	}


	//---------------------------------------------  API SOLO RENAPER  --------------------------------------------------------------------------------------------------------//
	public static function soloRenaper($dni_interno=null,$sexo_interno=null) {
		$usuario        = Session::get('usuario');
		$res_renaper = null;
		$fechaParaValidar = '';
		$generoParaValidar = '';		
		$forzado = 'N';

	//-- Validamos que el usuario tenga el producto habilitado
	//-- Si dni no es null, quiere decir que viene de una llamada interna
	if($usuario->producto == env('NRO_PRODUCTO_SOLO_RENAPER') || $dni_interno !== null) {
		//-- Parametros minimos requeridos
		if ($dni_interno!==null)
		{
			$dni = $dni_interno;
			$generoRecibido = trim($sexo_interno);
			$fecha_emision_recivida = '';
			$fecha_expiracion_emitida = '';
			$copia = '';
			$idMainIssue = '';
		}
		else
		{
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));
			$generoRecibido = trim((isset($_POST['gender']) ? $_POST['gender'] : (isset($_POST['GENDER']) ? $_POST['GENDER'] : '')));
		
			//-- Parametros opcionales que se van a evaluar luego a 'TRUE' o 'FALSE' en el Misc.php
			$fecha_emision_recivida = trim((isset($_POST['issue_date']) ? $_POST['issue_date'] : (isset($_POST['ISSUE_DATE']) ? $_POST['ISSUE_DATE'] : '')));
			$fecha_expiracion_emitida = trim((isset($_POST['expiry_date']) ? $_POST['expiry_date'] : (isset($_POST['EXPIRY_DATE']) ? $_POST['EXPIRY_DATE'] : '')));
			$copia = trim((isset($_POST['copy']) ? $_POST['copy'] : (isset($_POST['COPY']) ? $_POST['COPY'] : '')));
			$idMainIssue = trim((isset($_POST['id_main_issue']) ? $_POST['id_main_issue'] : (isset($_POST['ID_MAIN_ISSUE']) ? $_POST['ID_MAIN_ISSUE'] : '')));
		}
		
		//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
		if(empty($dni) || Misc::noEsPosibleDni($dni)) {
			return json_encode(['Parameters'=>$dni,'Status'=>'300','Message'=>'NATIONAL_ID field cannot be empty. Please use only numbers and complete with trailing zeroes up to eight digits.','Response'=>[]]);
		}
		
		$fechaParaValidar = Misc::manejadorFechaEmision($fecha_emision_recivida);		
		/* 20/12/2022: Si no mandan gender lo hacemos primero con M y despues con F, hacemos un loop con la variable $veces. Si se manda el sexo el loop lo hace solo una vez. */
		$veces = 1;
		
		if ($generoRecibido == '')
		{ 
			  $generoRecibido = 'M';
			  $veces = 2; 
		}
		

		for ($i = 1; $i <= $veces; $i++) {
		/**/
			$generoParaValidar = Misc::normalizadorGenero($generoRecibido);			
			try {				
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['national_id'] = $dni;
				$enviados['issue_date'] = $fecha_emision_recivida;
				$enviados['gender'] = $generoRecibido;
				$enviados['expiry_date'] = $fecha_expiracion_emitida;
				$enviados['copy'] = $copia;
				$enviados['id_main_issue'] = $idMainIssue;

				//$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni,$generoParaValidar),'select');  /* lo pasamos abajo 27/06/2023 */				
				try {
					//$res_renaper = self::tratamientoSoloRenaper($dni);
					$res_renaper = self::tratamientoSoloRenaper($dni, $generoParaValidar); /* 27/06/2023: No se mandaba sexo y buscaba siempre primero por 'F' y si habia F y M. Traia siempre el F */
					$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni,$generoParaValidar),'select'); /* lo pasamos aca 27/06/2023 */					
					
					// Modificacion Rami 01/08/2023
					if ( !empty($response) ){
						if(is_null($response[0]->ultimo_renaper) || Misc::cantidadMeses($response[0]->ultimo_renaper) >= 4) {
							$res_renaper = self::tratamientoRenaperCla($dni, $response[0]->genero, $response[0]->identificacion);
						}
					} else {
						$res_renaper = self::tratamientoRenaperCla($dni, $generoRecibido, $dni);
					}
					

					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					if(is_null($res_renaper) || empty($res_renaper)) {
					/* 20/12/2022 */
						if ($i < $veces)
						{
							$generoRecibido = 'F';
							continue;
						}
						else 
						{
							// antes hacia solo esto
							return json_encode(['Parameters'=>$enviados,'Status'=>'301','Message'=>'0-The provided national id does not match a valid one and could not be validated. Please review it and try again.','Response'=>[]]);
						}
					}
					/**/
					$respuestaFormateada = Misc::formatoRespuestaRenaper($res_renaper, $dni, $fechaParaValidar, $generoParaValidar, $fecha_emision_recivida, $fecha_expiracion_emitida, $copia, $idMainIssue);
					return json_encode(['Parameters'=>$enviados, 'Status'=>'200','Message'=>'OK','Response'=>$respuestaFormateada, 'Transaction_id'=>$id_consumo]);
				
				} catch (\Throwable $th) {
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					/* 20/12/2022 */

					
					if ($i < $veces)
					{
						 $generoRecibido = 'F';
						 continue;
					}
					else 
					{
						// antes hacia esto solo 
						$mensaje = 'Ver este caso API SOLO RENAPER fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
						Misc::enviarMail_errores_api($mensaje);
						return json_encode(['Status'=>'301','Message'=>'1-The provided national id does not match a valid one and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
					}
					/**/
				}	

			} catch (\Throwable $th) {
				$mensaje = 'Error al consultar API SOLO RENAPER fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'301','Message'=>'2-The provided national id does not match a valid one and could not be validated. Please review it and try again.']);

			}
			
		}
	}

	return json_encode(['response'=>'No posee acceso al producto.']);
}




	//---------------------------------------------  API SOLO RENAPER  --------------------------------------------------------------------------------------------------------//
	public static function soloRenaperGBG($dni_interno=null,$sexo_interno=null) {
		$usuario        = Session::get('usuario');
		$res_renaper = null;
		$fechaParaValidar = '';
		$generoParaValidar = '';		
		$forzado = 'N';

	//-- Validamos que el usuario tenga el producto habilitado
	//-- Si dni no es null, quiere decir que viene de una llamada interna
	if($usuario->producto == env('NRO_PRODUCTO_SOLO_RENAPER') || $dni_interno !== null) {
		//-- Parametros minimos requeridos
		if ($dni_interno!==null)
		{
			$dni = $dni_interno;
			$generoRecibido = trim($sexo_interno);
			$fecha_emision_recivida = '';
			$fecha_expiracion_emitida = '';
			$copia = '';
			$idMainIssue = '';
		}
		else
		{
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));
			$generoRecibido = trim((isset($_POST['gender']) ? $_POST['gender'] : (isset($_POST['GENDER']) ? $_POST['GENDER'] : '')));
		
			//-- Parametros opcionales que se van a evaluar luego a 'TRUE' o 'FALSE' en el Misc.php
			$fecha_emision_recivida = trim((isset($_POST['issue_date']) ? $_POST['issue_date'] : (isset($_POST['ISSUE_DATE']) ? $_POST['ISSUE_DATE'] : '')));
			$fecha_expiracion_emitida = trim((isset($_POST['expiry_date']) ? $_POST['expiry_date'] : (isset($_POST['EXPIRY_DATE']) ? $_POST['EXPIRY_DATE'] : '')));
			$copia = trim((isset($_POST['copy']) ? $_POST['copy'] : (isset($_POST['COPY']) ? $_POST['COPY'] : '')));
			$idMainIssue = trim((isset($_POST['id_main_issue']) ? $_POST['id_main_issue'] : (isset($_POST['ID_MAIN_ISSUE']) ? $_POST['ID_MAIN_ISSUE'] : '')));
		}
		
		//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
		if(empty($dni) || Misc::noEsPosibleDni($dni)) {
			return json_encode(['Parameters'=>$dni,'Status'=>'300','Message'=>'NATIONAL_ID field cannot be empty. Please use only numbers and complete with trailing zeroes up to eight digits.','Response'=>[]]);
		}
		
		$fechaParaValidar = Misc::manejadorFechaEmision($fecha_emision_recivida);		
		/* 20/12/2022: Si no mandan gender lo hacemos primero con M y despues con F, hacemos un loop con la variable $veces. Si se manda el sexo el loop lo hace solo una vez. */
		$veces = 1;
		
		if ($generoRecibido == '')
		{ 
			  $generoRecibido = 'M';
			  $veces = 2; 
		}
		

		for ($i = 1; $i <= $veces; $i++) {
		/**/
			$generoParaValidar = Misc::normalizadorGenero($generoRecibido);			
			try {				
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['national_id'] = $dni;
				$enviados['issue_date'] = $fecha_emision_recivida;
				$enviados['gender'] = $generoRecibido;
				$enviados['expiry_date'] = $fecha_expiracion_emitida;
				$enviados['copy'] = $copia;
				$enviados['id_main_issue'] = $idMainIssue;

				//$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni,$generoParaValidar),'select');  /* lo pasamos abajo 27/06/2023 */				
				try {
					//$res_renaper = self::tratamientoSoloRenaper($dni);
					$res_renaper = self::tratamientoSoloRenaper($dni, $generoParaValidar); /* 27/06/2023: No se mandaba sexo y buscaba siempre primero por 'F' y si habia F y M. Traia siempre el F */
					$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni,$generoParaValidar),'select'); /* lo pasamos aca 27/06/2023 */					
					
					// Modificacion Rami 01/08/2023
					if ( !empty($response) ){
						if(is_null($response[0]->ultimo_renaper) || Misc::cantidadMeses($response[0]->ultimo_renaper) >= 4) {
							$res_renaper = self::tratamientoRenaperCla($dni, $response[0]->genero, $response[0]->identificacion);
						}
					} else {
						$res_renaper = self::tratamientoRenaperCla($dni, $generoRecibido, $dni);
					}
					

					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					if(is_null($res_renaper) || empty($res_renaper)) {
					/* 20/12/2022 */
						if ($i < $veces)
						{
							$generoRecibido = 'F';
							continue;
						}
						else 
						{
							// antes hacia solo esto
							return json_encode(['Parameters'=>$enviados,'Status'=>'301','Message'=>'0-The provided national id does not match a valid one and could not be validated. Please review it and try again.','Response'=>[]]);
						}
					}
					/**/
					$respuestaFormateada = Misc::formatoRespuestaRenaper($res_renaper, $dni, $fechaParaValidar, $generoParaValidar, $fecha_emision_recivida, $fecha_expiracion_emitida, $copia, $idMainIssue);
					return json_encode(['Parameters'=>$enviados, 'Status'=>'200','Message'=>'OK','Response'=>$respuestaFormateada, 'Transaction_id'=>$id_consumo]);
				
				} catch (\Throwable $th) {
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					/* 20/12/2022 */

					
					if ($i < $veces)
					{
						 $generoRecibido = 'F';
						 continue;
					}
					else 
					{
						// antes hacia esto solo 
						$mensaje = 'Ver este caso API SOLO RENAPER fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
						Misc::enviarMail_errores_api($mensaje);
						return json_encode(['Status'=>'301','Message'=>'1-The provided national id does not match a valid one and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
					}
					/**/
				}	

			} catch (\Throwable $th) {
				$mensaje = 'Error al consultar API SOLO RENAPER fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'301','Message'=>'2-The provided national id does not match a valid one and could not be validated. Please review it and try again.']);

			}
			
		}
	}

	return json_encode(['response'=>'No posee acceso al producto.']);
}




	public static function soloRenaper_al20122022() {
		$usuario        = Session::get('usuario');
		$res_renaper = null;
		$fechaParaValidar = '';
		$generoParaValidar = '';

		//-- Validamos que el usuario tenga el producto habilitado
		if($usuario->producto == env('NRO_PRODUCTO_SOLO_RENAPER')) {
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));
			$fecha_emision_recivida = trim((isset($_POST['issue_date']) ? $_POST['issue_date'] : (isset($_POST['ISSUE_DATE']) ? $_POST['ISSUE_DATE'] : '')));
			$generoRecibido = trim((isset($_POST['gender']) ? $_POST['gender'] : (isset($_POST['GENDER']) ? $_POST['GENDER'] : '')));
			
			//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
			if(empty($dni) || Misc::noEsPosibleDni($dni)) {
				return json_encode(['Parameters'=>$dni,'Status'=>'300','Message'=>'NATIONAL_ID field cannot be empty. Please use only numbers and complete with trailing zeroes up to eight digits.','Response'=>[]]);
			}

			$fechaParaValidar = Misc::manejadorFechaEmision($fecha_emision_recivida);
			$generoParaValidar = Misc::normalizadorGenero($generoRecibido);
			
			try {
				
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['national_id'] = $dni;
				$enviados['issue_date'] = $fecha_emision_recivida;
				$enviados['gender'] = $generoRecibido;
				$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni,$generoParaValidar),'select');
				
				try {
					$res_renaper = self::tratamientoSoloRenaper($dni);
					if(is_null($response[0]->ultimo_renaper) || Misc::cantidadMeses($response[0]->ultimo_renaper) >= 4) {
						$res_renaper = self::tratamientoRenaperCla($dni, $response[0]->genero, $response[0]->identificacion);
					}

					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					
					if(is_null($res_renaper) || count($res_renaper) == 0) {
						return json_encode(['Parameters'=>$enviados,'Status'=>'301','Message'=>'The provided national id does not match a valid one and could not be validated. Please review it and try again.','Response'=>[]]);
					}

					$respuestaFormateada = Misc::formatoRespuestaRenaper($res_renaper, $dni, $fechaParaValidar, $generoParaValidar);
					return json_encode(['Parameters'=>$enviados, 'Status'=>'200','Message'=>'OK','Response'=>$respuestaFormateada, 'Transaction_id'=>$id_consumo]);
				
				} catch (\Throwable $th) {
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					
					$mensaje = 'Ver este caso API SOLO RENAPER fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
					Misc::enviarMail_errores_api($mensaje);
					return json_encode(['Status'=>'301','Message'=>'The provided national id does not match a valid one and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
				}

			} catch (\Throwable $th) {
				$mensaje = 'Error al consultar API SOLO RENAPER fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'301','Message'=>'The provided national id does not match a valid one and could not be validated. Please review it and try again.']);

			}
			
		}

		return json_encode(['response'=>'No posee acceso al producto.']);
	}


// 29/11/2022 

public static function soloRenaperGovcheckPlus() {
		$usuario        = Session::get('usuario');
		$res_renaper = null;
		$fechaParaValidar = '';
		$generoParaValidar = '';
		$apiPersonalData = 'N';
		$apiGobcheckPlus = 'N';
		if ($usuario->producto == env('NRO_PRODUCTO_SOLO_RENAPER'))
			{ $apiPersonalData = 'S';}
		if($usuario->producto == env('NRO_PRODUCTO_GOVCHECKPLUS')) 
			{ $apiGobcheckPlus = 'S';}

		//-- Validamos que el usuario tenga el producto habilitado
		if($usuario->producto == env('NRO_PRODUCTO_SOLO_RENAPER') || $usuario->producto == env('NRO_PRODUCTO_GOVCHECKPLUS')) {
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));
			$fecha_emision_recivida = trim((isset($_POST['issue_date']) ? $_POST['issue_date'] : (isset($_POST['ISSUE_DATE']) ? $_POST['ISSUE_DATE'] : '')));
			$generoRecibido = trim((isset($_POST['gender']) ? $_POST['gender'] : (isset($_POST['GENDER']) ? $_POST['GENDER'] : '')));
			
			//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
			if(empty($dni) || Misc::noEsPosibleDni($dni)) {
				return json_encode(['Parameters'=>$dni,'Status'=>'300','Message'=>'NATIONAL_ID field cannot be empty. Please use only numbers and complete with trailing zeroes up to eight digits.','Response'=>[]]);
			}
			if(empty($generoRecibido) || $generoRecibido == '') {
				return json_encode(['Parameters'=>$dni,'Status'=>'300','Message'=>'GENDER field cannot be empty.','Response'=>[]]);
			}
			if ($apiPersonalData == 'S') 
					{ $fechaParaValidar = Misc::manejadorFechaEmision($fecha_emision_recivida); } 
			$generoParaValidar = Misc::normalizadorGenero($generoRecibido);
			try {
				
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['national_id'] = $dni;
				if ($apiPersonalData == 'S') { $enviados['issue_date'] = $fecha_emision_recivida; }
				$enviados['gender'] = $generoRecibido;
				//$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni,$generoRecibido),'select'); /* lo pasamos abajo 27/06/2023 */

				try {
					//$res_renaper = self::tratamientoSoloRenaper($dni);
					$res_renaper = self::tratamientoSoloRenaper($dni, $generoRecibido); /* 27/06/2023: No se mandaba sexo y buscaba siempre primero por 'F' 
																									   y si habia F y M. Traia siempre el F */
					$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni,$generoRecibido),'select'); /* lo pasamos aca 27/06/2023 */
					if(is_null($response[0]->ultimo_renaper) || Misc::cantidadMeses($response[0]->ultimo_renaper) >= 4) {
						$res_renaper = self::tratamientoRenaperCla($dni, $response[0]->genero, $response[0]->identificacion);
					}
				
					//$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					$id_consumo = self::consumir_servicio($dni,$usuario->producto)->transaction_id;
					
					if(is_null($res_renaper) || empty($res_renaper)) {
						return json_encode(['Parameters'=>$enviados,'Status'=>'301','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.','Response'=>[]]);
					}
					if ($apiPersonalData == 'S') 
					{ 
						$respuestaFormateada = Misc::formatoRespuestaRenaper($res_renaper, $dni, $fechaParaValidar, $generoParaValidar);
					}
					//if ($apiGobcheckPlus == 'S') 
					else 
					{
						$respuestaFormateada = Misc::conversorApisGovcheckPlus($response[0], $res_renaper); 
					}
					return json_encode(['Parameters'=>$enviados, 'Status'=>'200','Message'=>'OK','Response'=>$respuestaFormateada, 'Transaction_id'=>$id_consumo]);
					 
				
				} catch (\Throwable $th) {
					 
					//$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_SOLO_RENAPER'))->transaction_id;
					
					$id_consumo = self::consumir_servicio($dni,$usuario->producto)->transaction_id;
					
					$mensaje = 'Ver este caso API SOLO RENAPER o GOVCHECKPLUS fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
					Misc::enviarMail_errores_api($mensaje);
					return json_encode(['Status'=>'301','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
				}

			} catch (\Throwable $th) {
				$mensaje = 'Error al consultar API SOLO RENAPER o GOVCHECKPLUS fidelitas-test - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'301','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.']);

			}
			
		}

		return json_encode(['response'=>'No posee acceso al producto.']);
	}

	/*
		Funcio consulta RENAPER para API SOLOrENAPER
	*/
		/*
	public static function tratamientoRenaperCla($dni, $sexo, $cuit) {
		if(($sexo != 'F' && $sexo != 'M' || is_null($sexo))) {
			$sexo = Misc::posibleGenero($cuit);
		}
		//return json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, $sexo, 1))->Response;
		$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, $sexo, 1))->Response;
		if(count($r) == 0 && $sexo == 'M') {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'F', 1))->Response;
			return (count($r) == 0) ? null : $r;
			//return json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'F', 1))->Response;
		} else if(count($r) == 0 && $sexo == 'F') {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'M', 1))->Response;
			return (count($r) == 0) ? null : $r;
			//return json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'M', 1))->Response;
		} else {
			return $r;
		}
	}

	//-- ESTA FUNCION ES SOLO PARA LA API soloRenaper
	public static function tratamientoSoloRenaper($dni) {
		
		$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'F', 1))->Response;
		if(count($r) == 0) {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'M', 1))->Response;
			return (count($r) == 0) ? null : $r;
		} else if(count($r) == 1) {
			return $r;
		} else {
			return null;
		}
	}
	*/

		//-- ESTA FUNCION ES SOLO PARA LA API soloRenaper
	public static function tratamientoSoloRenaper27062023($dni) {
		
		$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'F', 1))->Response;
		if(empty($r)) {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'M', 1))->Response;
			return (empty($r)) ? null : $r;
		} else if(!empty($r)) {
			return $r;
		} else {
			return null;
		}
	}

	public static function tratamientoSoloRenaper($dni,$sexo='F') {
		
		$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, $sexo, 1))->Response;
		if(empty($r) && $sexo == 'M') {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'F', 1))->Response;
			return (empty($r)) ? null : $r;
		} else if(empty($r) && $sexo == 'F') {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'M', 1))->Response;
			return (empty($r)) ? null : $r;
		} else {
			return $r;
		}


	}


	/*
	Funcio consulta RENAPER para API SOLOrENAPER
	*/
	public static function tratamientoRenaperCla($dni, $sexo, $cuit) {
		if(($sexo != 'F' && $sexo != 'M') || is_null($sexo)) { 
			$sexo = Misc::posibleGenero($cuit); // busca posible genero si no lo tiene
		}
		//return json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, $sexo, 1))->Response;
		$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, $sexo, 1))->Response;
		if(empty($r) && $sexo == 'M') {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'F', 1))->Response;
			return (empty($r)) ? null : $r;
			//return json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'F', 1))->Response;
		} else if(empty($r) && $sexo == 'F') {
			$r = json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'M', 1))->Response;
			return (empty($r)) ? null : $r;
			//return json_decode(RenaperController::obtenerUltimoEjemplarCompleto($dni, 'M', 1))->Response;
		} else {
			return $r;
		}
	}

	public static function obtenerApiPEP(){
		$ip                 = $_SERVER['REMOTE_ADDR'];
		$country            = Request::input('country_code');
		$tax_id             = Request::input('tax_id');
		//$surname            = Request::input('surname');
		$name               = Request::input('full_name');
		$apikey             = Request::input('apikey');
		$url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
		$usuario        = Session::get('usuario');
		$user_id        = $usuario->user_id;
		$enviados = array('country_code' => $country, 'tax_id' => $tax_id, 'full_name' => $name);

		if(empty($tax_id)){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'TAX_ID CAN BE NOT NULL','Response'=>[]
			]);
		}
		//
		if(!empty($tax_id) && strlen($tax_id) !== 11 && !empty($country) && strtoupper($country) == 'AR'){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE NUMBER OF CHARACTERS FOR TAX_ID IS 11 (AR)','Response'=>[]
			]);
		}
		//
		if(empty($name) /*|| empty($surname)*/){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'NAME CAN BE NOT NULL','Response'=>[]
			]);
		}
		if(strlen($name) < 2 /*|| strlen($surname) < 2*/){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'THE MINIMUM NUMBER OF CHARACTERS FOR NAME IS 2','Response'=>[]
			]);
		}
		/* Pase por afip, si es CUIT de Argentina */
		if(!empty($tax_id) && strlen($tax_id) == 11 && !empty($country) && strtoupper($country) == 'AR')
		{
			if(ENV('SERVICIOS_AFIP') == true)
			{
				AFIPController::obtenerPadron($tax_id,true,'AR',false);
		 	}
		}
		$usuario        = Session::get('usuario');
		$producto       = $usuario->producto ?? 88;
		self::consumir_servicio($tax_id,$producto);
		
		$respuesta = [];
		/*$respuesta == LLAMAMOS A PEP */
		$url = env('API_PEP');
		$params = '?cuit=' . $tax_id . '&nombre_persona=' .  str_replace(' ','%20',$name) . '&pais=' . $country;
		$respuesta = Misc::CURLCall(env('API_PEP') . $params, '', 'GET');
		//return $respuesta;
		//--  SE AMPLIA RESULTADO, SE INCORPORAN PARAMETRO DE INGRESO  --//
		$respuesta = json_decode($respuesta);
		return json_encode([
			'parameters'=>$enviados,'response'=>$respuesta
		]);
  	}

	public static function obtenerApiPEP_full(){
		$ip                 = $_SERVER['REMOTE_ADDR'];
		//$country            = Request::input('country_code');
		$tax_id             = (Request::input('tax_id') !== null) ? Request::input('tax_id') : 'null';
		$name               = Request::input('full_name');
		$apikey             = Request::input('apikey');
		//$version 			= Request::input('version');
		$url = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
		$usuario        = Session::get('usuario');
		$user_id        = $usuario->user_id;
		//$enviados = array('country_code' => $country, 'tax_id' => $tax_id, 'full_name' => $name);
		$enviados = [];

		$usuario        = Session::get('usuario');
		$producto       = $usuario->producto ?? 88;
		//self::consumir_servicio($tax_id,$producto);

		$respuesta = [];
		/*$respuesta == LLAMAMOS A PEP */
		//$url = env('API_PEP');  //--> COMENTAR PARA DEBUG
		$url = env('API_PEP_FULL');  //--> COMENTAR PARA PRODUCCION
		$params = '?cuit=' . $tax_id . '&nombre_persona=' .  str_replace(' ','%20',$name) . '&pais=' . '';
		$respuesta = Misc::CURLCall($url . $params, '', 'GET');
		return $respuesta;

		$respuesta = json_decode($respuesta);
		return json_encode([
			'parameters'=>$enviados,'response'=>$respuesta
		]);
  	}

	  //-- SE USA EN COMPLEMENTO CON obtenerPadronForzado 
	private static function BuscarCuit_Forzado($dni,$posibles='N') {
		/* 01/10/2020 */
		/* Busca CUITs en el padron, para ese dni, y lo pasa por AFIP */ 
		/* Segundo parametro 'S' busca siempre otros posibles CUITs que no estén en el padrón */
		/* o si no lo encuetra en Padrón busca si o si los posibles CUITs para ese DNI */
		$cuits = SQLConnection::backendStoreProcedure('dni_buscar_cuit_segun_dni', array($dni));
		foreach ($cuits as $key => $value) {
			//echo($value->cuit."<br>");
			 AFIPController::obtenerPadronForzado($value->cuit,true,'AR',false);
		}
		//echo(var_dump($cuits)); die();
		if ($posibles == 'S' && sizeof($cuits) == 0) {
			  $cuitp = SQLConnection::backendStoreProcedure('dni_buscar_cuit_posible', array($dni,'N')); 
			  foreach ($cuitp as $key => $value) {
				 AFIPController::obtenerPadronForzado($value->cuit,true,'AR',false);
			}
			return $cuitp; 
		} 
		return $cuits; 
	}

	  public static function govcheck() {
		$usuario        = Session::get('usuario');
		//-- Validamos que el usuario tenga el producto habilitado
		if($usuario->producto == env('NRO_PRODUCTO_GOVCHECK')) {
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));

			//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
			if(empty($dni) || Misc::noEsPosibleDni($dni)) {
				return json_encode(['Parameters'=>$dni,'Status'=>'ERROR','Message'=>'El campo dni no puede estar vacío y debe ser un número de 8 dígitos','Response'=>[]]);
			}

			try {
			
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['National_id'] = $dni;
				$res2 = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select');
				// echo(var_dump($res2));die();
				$response = Misc::conversorApisGovcheck($res2);
				
				if(count($res2) == 0 || is_null($res2[0]->fecha_nacimiento) || is_null($res2[0]->ultimo_afip) || Misc::cantidadMeses($res2[0]->ultimo_afip) >= 4) {
					//self::BuscarCuit($dni,'S');
					self::BuscarCuit_Forzado($dni, 'S');
					$response = Misc::conversorApisGovcheck(SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select'));
				}

				try {
					$tid = (!is_null($response[0]->Tax_id_number)) ? $response[0]->Tax_id_number : $dni;
					$id_consumo = self::consumir_servicio($tid,env('NRO_PRODUCTO_GOVCHECK'));
					//-- ESTA SECCION SE AGREGA PARA IDENTIFICAR ERROR QUE GENERA EL STORE 'consumir_servicio_api'
					if($id_consumo->transaction_id == 0 || $id_consumo->transaction_id == '0' || is_null($id_consumo)) {
						$data = (is_null($id_consumo)) ? 'NULL' : $id_consumo->error;
						$mensaje = 'API GOVCHECK fidelitasprod.int - ERROR - DNI consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine().'<br>Error store dentro de consumir_servicio: '.$data;
						Misc::enviarMail_errores_api($mensaje);
					}
					return json_encode(['Parameters'=>$enviados, 'Results'=>count($response), 'Notification'=>Misc::gestorNotificacionGovcheck($response), 'Response'=>$response, 'Transaction_id'=>$id_consumo->transaction_id]);	
				
				} catch (\Throwable $th) {
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_GOVCHECK'));
					if($id_consumo->transaction_id == 0 || $id_consumo->transaction_id == '0' || is_null($id_consumo)) {
						$data = (is_null($id_consumo)) ? 'NULL' : $id_consumo->error;
						$mensaje = 'API GOVCHECK fidelitasprod.int - ERROR - DNI consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine().'<br>Error store dentro de consumir_servicio: '.$data;
						Misc::enviarMail_errores_api($mensaje);
					} else {
						$mensaje = 'API GOVCHECK fidelitasprod.int - MIRAR ESTE CASO - DNI consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
						Misc::enviarMail_errores_api($mensaje);
					}
					
					return json_encode(['Status'=>'ERROR','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo->transaction_id]);
				}
				

			} catch (\Throwable $th) {
				
				$mensaje = 'Error al consultar API GOVCHECK fidelitasprod.int - DNI consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'TIMEOUT EXCEEDED.']);

			}

			
		}
		return json_encode(['Response'=>'No posee acceso al producto.']);
	}

	//--  Funcion principal para GOVCHECK
	public static function govcheck_Anterior() {
		
		$usuario        = Session::get('usuario');
		
		//-- Validamos que el usuario tenga el producto habilitado
		if($usuario->producto == env('NRO_PRODUCTO_GOVCHECK')) {
			$dni = trim( (isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '') ) );

			//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
			if(empty($dni) || Misc::noEsPosibleDni($dni)) {
				return json_encode(['Parameters'=>$dni,'Status'=>'ERROR','Message'=>'El campo dni no puede estar vacío y debe ser un número de 8 dígitos','Response'=>[]]);
			}

			try {
				
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['National_id'] = $dni;

				$response = Misc::conversorApisGovcheck(SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select'));
				
				if(count($response) == 0) {
					self::BuscarCuit($dni,'S');
					$response = Misc::conversorApisGovcheck(SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select'));
				}

				try {
					$tid = (!is_null($response[0]->Tax_id_number)) ? $response[0]->Tax_id_number : $dni;
					// $id_consumo = self::consumir_servicio($tid,env('NRO_PRODUCTO_GOVCHECK'))->transaction_id;
					$id_consumo = 'nahuel';
					return json_encode(['Parameters'=>$enviados, 'Results'=>count($response), 'Notification'=>Misc::gestorNotificacionGovcheck($response), 'Response'=>$response, 'Transaction_id'=>$id_consumo]);	
				
				} catch (\Throwable $th) {
					// $id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_GOVCHECK'))->transaction_id;
					$id_consumo = 'nahuel';
					$mensaje = 'API GOVCHECK fidelitasprod.int  VER ESTE CASO - Dni consultado: '.$dni.'<br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
					Misc::enviarMail_errores_api($mensaje);
					return json_encode(['Status'=>'ERROR','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
				}
				

			} catch (\Throwable $th) {
				
				$mensaje = 'Error al consultar API GOVCHECK fidelitasprod.int <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'TIMEOUT EXCEEDED']);

			}
			
		}
		return json_encode(['Response'=>'No posee acceso al producto.']);
	}

	//--  Funcion principal para EXTENDED
	public static function extended() {
		$usuario        = Session::get('usuario');
		$res_renaper = null;
		//-- Validamos que el usuario tenga el producto habilitado
		if($usuario->producto == env('NRO_PRODUCTO_EXTENDED')) {
			$dni = trim((isset($_POST['national_id']) ? $_POST['national_id'] : (isset($_POST['NATIONAL_ID']) ? $_POST['NATIONAL_ID'] : '')));
			//-- validamos que no este vacio y que sean todos numeros con longitud de 7 a 8
			if(empty($dni) || Misc::noEsPosibleDni($dni)) {
				return json_encode(['Parameters'=>$dni,'Status'=>'ERROR','Message'=>'El campo NATIONAL_ID no puede estar vacío y debe ser un número de 8 dígitos','Response'=>[]]);
			}

			try {
				
				//-- si es longitud 7, le agregamos 0 delante.
				$dni = (strlen($dni) == 7) ? '0'.$dni : $dni;
				$enviados['National_id'] = $dni;
				
				$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select');

				if(count($response) == 0) {
					self::BuscarCuit($dni,'S');
					$response = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select');
				}

				try {
					$tid = (!is_null($response[0]->identificacion)) ? $response[0]->identificacion : $dni;
					$id_consumo = self::consumir_servicio($tid,env('NRO_PRODUCTO_EXTENDED'))->transaction_id;

					//-- Validamos que solo tengamos un solo registro o no este vacio ni fallecido
					if(count($response) > 1 || count($response) == 0 || !is_null($response[0]->fecha_defuncion)) {
						$response = Misc::conversorApisGovcheck($response);
						return json_encode(['parameters'=>$enviados, 'results'=>count($response), 'notification'=>Misc::gestorNotificacionGovcheck($response), 'response'=>$response, 'Transaction_id'=>$id_consumo]);
					}
					
					//-- aca debe ir afip  ----------------------------------------------------------
					if(is_null($response[0]->ultimo_afip) || Misc::cantidadMeses($response[0]->ultimo_afip) >= 4) {
						AFIPController::obtenerPadron($response[0]->identificacion,true,'AR',false);
					}
					//-------------------------------------------------------------------------------
					//-- desde aca llamada logica para renaper y ws.
					$res_renaper = self::tratamientoRenaperExtend($response[0]->ultimo_renaper, $dni, $response[0]->genero, $response[0]->identificacion);
					
					if(count($res_renaper) == 0 && !is_null($res_renaper)) {
						return json_encode(['parameters'=>$enviados, 'results'=>0, 'notification'=>Misc::gestorNotificacionGovcheck(null), 'Transaction_id'=>$id_consumo]);	
					}
					
					$res_ws = self::resFidecheckExtend($response[0]->dni, $response[0]->nombre_persona, $response[0]->identificacion);
					$response_v2 = Misc::conversorApisExtended($response, $res_renaper, $res_ws);
					return json_encode(['parameters'=>$enviados, 'results'=>count($response), 'notification'=>Misc::gestorNotificacionGovcheck($response), 'response'=>$response_v2, 'Transaction_id'=>$id_consumo]);
				
				} catch (\Throwable $th) {
					
					$id_consumo = self::consumir_servicio($dni,env('NRO_PRODUCTO_EXTENDED'))->transaction_id;
					$mensaje = 'Ver este caso API EXTENDED fidelitas2 - Dni consultado: '.$dni.' <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
					Misc::enviarMail_errores_api($mensaje);
					return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.', 'Transaction_id'=>$id_consumo]);
				}
				

			} catch (\Throwable $th) {
				
				$mensaje = 'Error al consultar API EXTENDED fidelitas2 <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'TIMEOUT EXCEEDED']);

			}
			
		}

		return json_encode(['response'=>'No posee acceso al producto.']);
	}

	/*
		Funcio consulta RENAPER para EXTENDED
	*/
	public static function tratamientoRenaperExtend($fecha_ultima_renaper, $dni, $sexo, $cuit) {
		if(is_null($fecha_ultima_renaper) || Misc::cantidadMeses($fecha_ultima_renaper) >= 4) {
			if(($sexo != 'F' && $sexo != 'M' || is_null($sexo))) {
				$sexo = Misc::posibleGenero($cuit);
			}
			//return json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, $sexo, 1))->Response;
			$r = json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, $sexo, 1))->Response;
			if(count($r) == 0 && $sexo == 'M') {
				$r = json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, 'F', 1))->Response;
				return (count($r) == 0) ? null : $r;
				//return json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, 'F', 1))->Response;
			} else if(count($r) == 0 && $sexo == 'F') {
				$r = json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, 'M', 1))->Response;
				return (count($r) == 0) ? null : $r;
				//return json_decode(RenaperController::obtenerUltimoEjemplarUno($dni, 'M', 1))->Response;
			} else {
				return $r;
			}
		}
		return null;
	}

	/*
		Llamada a WS solo para EXTENDED 
	*/
	public static function resFidecheckExtend($dni, $nombre_completo, $cuit) {
		//-- llamada a WS
		$url = env('API_PEP_FULL');
		$params = '?cuit=' . $dni . '&nombre_persona=' .  str_replace(' ','%20',$nombre_completo) . '&pais=' . '';
		
		$arreglo = array();

		$obj = new StdClass();
		$so = array();
		$pep = array();
		$sancionado = array();

		$res = json_decode(Misc::CURLCall($url . $params, '', 'GET'));
  
		$n2 = explode(' ', trim(strtoupper($nombre_completo)));

		for ($i=0; $i<count($res); $i++) {
			$n1 = explode(' ', trim(strtoupper($res[$i]->nombre)));
			
			if((Misc::esElMismoNombre($n1, $n2) && $cuit == $res[$i]->taxid) || (strtoupper($res[$i]->pais) == 'ARGENTINA' && Misc::esElMismoNombre($n1, $n2) && $res[$i]->fidecheck == 'SUJETO OBLIGADO')) {
			//if((Misc::esElMismoNombre($n1, $n2) || $cuit == $res[$i]->taxid) && strtoupper($res[$i]->pais) == 'ARGENTINA') {
				//$arreglo[$i] = $res[$i];
				switch ($res[$i]->fidecheck) {
					case 'SANCIONADO':
						$sancionado[] = array('Position'=>$res[$i]->cargo,'Institution'=>$res[$i]->institucion,'Description'=>$res[$i]->descripcion);
						break;
					case 'PEP':
						$pep[] = array('Position'=>$res[$i]->cargo,'Institution'=>$res[$i]->institucion,'Description'=>$res[$i]->descripcion);
						break;
					case 'SUJETO OBLIGADO':
						$so[] = array('Position'=>$res[$i]->cargo,'Institution'=>$res[$i]->institucion,'Description'=>$res[$i]->descripcion);
						break;
					default:
						# code...
						break;
				}
			}
		}
		$obj->Sanctions_search = (count($sancionado)>0) ? $sancionado : null;
		$obj->Pep_search = (count($pep)>0) ? $pep : null;
		$obj->So_search = (count($so)>0) ? $so : null;
		return $obj;
	}

	/* 
		ESTA FUNCION SE DESACTIVA EL LLAMADO A obtenerPadron PORQUE YA SE ESTA USANDO EN LA FUNCION QUE LO ESTA LLAMANDO Y GENERA UNA DEMORA IMPORTANTE
		HASTA EL MOMENTO 17-02-2022 SOLO LA ESTAN USANDO obtenerInformeComercialCompleto Y icNse.
		SI SE DECIDE AGREGAR EN OTRAS, VERIFICAR QUE PREVIO SE LLAMADO A obtenerPadron
	*/
	public static function obtenerServicioScore_Cla($cuit='',$calcular_balance=true,$constancia_afip=true){
		// PARCHE PARA EVITAR QUE SE ROMPA, NO SE DETECTA PROBLEMA DE EL PORQUE FALLA LA LLAMADA AL STORE  --//
		// SI FALLA ESTO, QUE DIOS SE APIADE DE NOSOTROS.
		//$porcentaje_por_grupo_alternativo = SQLConnection::obtenerPorcentajePorGrupo('20177260909');
		$porcentaje_por_grupo_alternativo = new stdClass();
		$porcentaje_por_grupo_alternativo->judicial = '24,4';
		$porcentaje_por_grupo_alternativo->cendeu = '26,8';
		$porcentaje_por_grupo_alternativo->cheques = '31,0';
		$porcentaje_por_grupo_alternativo->fiscal = '11,9';
		$porcentaje_por_grupo_alternativo->formal = '5,9';
		//---------------------------------------------------------------------------------------------------//
		if(!$cuit){
			$cuit  = Request::input('cuit');
		}
		$numero_cliente  = Request::input('cliente');
		MainController::verificarMongo($cuit);
		$user_id = 0;
		//$p_fisica = (substr($cuit,0,1) == 3) ? false : true;
		$fisica_juridica = Misc::tipoPersona($cuit); 
		$p_fisica = ($fisica_juridica == 'F') ? true : false;
		$resp_constancia = [];
		//Si afip es true pasa por afip. 
		//-------------------------------------------------  INICIO  --------------------------------------------------------//
		try {
			if(ENV('SERVICIOS_AFIP') == true){
				SQLConnection::busquedaPadron($cuit,1);
				//AFIPController::obtenerPadron($cuit,false,'AR',$constancia_afip); //--> SE COMENTA ESTO PORQUE YA ESTA SIENDO USADA POR LA FUNCION QUE LLAMA A ESTA.
				$resp_constancia = AFIPController::obtenerConstanciaPDF($cuit);
			}else {
				$resp_constancia['response'] = 'constancia deshabilitado';
				$resp_constancia['constancia_error'] = false;
				// Si es persona fisica y no tenemos ni año ni fecha de nacimiento, y no se la puede completar con el padron electoral, entonces SI va a afip
				if ($p_fisica) { 
					$tiene_nac = SQLConnection::obtenerTieneNacimiento($cuit);
					if(isset($tiene_nac->tiene_nacimiento) && $tiene_nac->tiene_nacimiento == 0){
						$actualiza = SQLConnection::actualizarDatosConPadron($cuit,$user_id);
						if (!isset($actualiza->respuesta) || $actualiza->respuesta != 'ok') {
							SQLConnection::busquedaPadron($cuit,1);
							//AFIPController::obtenerPadron($cuit,false,'AR',$constancia_afip); //--> SE COMENTA ESTO PORQUE YA ESTA SIENDO USADA POR LA FUNCION QUE LLAMA A ESTA.
						}
					}
				}
			}
			//--  SE AGREGAR CAPTURA DE ERROR PARA EVITAR LA ROTURA TOTAL, EXISTE PROBLEMA PARA VERIFICAR LOS MOTIVOS DE RECHAZOS  --//
			try {
				if(self::$revisar_monsanto == true){
					//$resp = SQLConnection::backendStoreProcedure('obtener_contraparte_cuit',array($cuit,110864291),'selectOne');  //-->  LINEA ORIGINAL, SE COMENTA PORQUE ESA FUNCION NO ES OPTIMA
					$respA = SQLConnection::obtenerContraparteCla($cuit, '110864291');
					//echo(var_dump($respA[0]->contraparte));die();
					$contraparte = $respA[0]->contraparte;
					//$resp = SQLConnection::backendStoreProcedure('LN_panel_control_excel',array(110864291,$contraparte),'selectOne'); //-->  LINEA ORIGINAL, SE COMENTA PORQUE ESA FUNCION NO ES OPTIMA
					$resp = SQLConnection::controlExcelCla('110864291', $contraparte);
					if(isset($resp[0]->detalle_killer) && $resp[0]->detalle_killer !== ''){
						self::$monsanto = 'Rechazo por '.$resp[0]->detalle_killer;
					}
				}
			} catch (\Throwable $th) {
				self::$monsanto = 'Rechazo por No se pudieron obtener los motivos de rechazo. ';//.$th->getMessage();
			}
			/* Si está fallecido o Sintomas de vitalidad = 0, el score da cero */
			$defuncion      = SQLConnection::obtenerDefuncion($cuit);
			if(isset($defuncion->fecha_deceso)){
				self::$monsanto = 'Rechazo por defunción';
				return json_encode(['score'=>0,'debug_score'=>'Fecha Deceso','resp_constancia' => $resp_constancia]);
			}
			$vitalidad =  SQLConnection::obtenerSintomasDeVitalidad($cuit);
			if(isset($vitalidad->vitalidad) && $vitalidad->vitalidad == 0){
				return json_encode(['score'=>0,'debug_score'=>'Sintomas de Vitalidad','resp_constancia' => $resp_constancia]);
			}

			$debug_score = '';
			// Obtener Bancos para calcular si amerita por situación uno y sumar al score
			// Se almacenan en variable de clase para ser reutilizadas en la pestaña de bancos
			$obtener_bancos = SQLConnection::obtenerBancos($cuit);
			$situacion_1    = Misc::ameritaPorSituacionUno($obtener_bancos);
			self::$amerita_situacion_1 = $situacion_1['amerita'];
			self::$cantidad_situacion_1 = $situacion_1['cantidad'];

			$tabla_score    = SQLConnection::obtenerTablaScore();

			$tabla_score_ordenada     = [];
			$score_ordenado = []; 
			
			foreach($tabla_score as $score){
				$score->cantidad = 0;
				$tabla_score_ordenada[$score->id_grupo][$score->codigo][] = $score;
			}
			$tabla_score_con_cantidades = $tabla_score_ordenada;
			$array_score_general    = SQLConnection::obtenerScore($cuit,$p_fisica);
			$score_fiscales         = SQLConnection::obtenerScoreFiscales($cuit,$p_fisica);
			$score = 70;
			foreach($array_score_general as $score_general){
				if($score_general->grupo ==2){
					$score_ordenado[$score_general->grupo][$score_general->codigo][$score_general->fecha][] = $score_general;
				}else{
					$score_ordenado[$score_general->grupo][$score_general->codigo][] = $score_general;
				}
			}
			//echo($cuit." - ");
			$porcentaje_por_grupo       = SQLConnection::obtenerPorcentajePorGrupo($cuit);
			//echo(var_dump($porcentaje_por_grupo)); die();
			
			//------------------  SE AGREGA ESTA SECCION PORQUE DABA ERROR AL CLONAR OBJETO  --------------------//
			try {
				self::$porcentaje_por_grupo_afectado_por_preferencias = clone $porcentaje_por_grupo;
			} catch (\Throwable $th) {
				$porcentaje_por_grupo = $porcentaje_por_grupo_alternativo;
				self::$porcentaje_por_grupo_afectado_por_preferencias = clone $porcentaje_por_grupo_alternativo;
			}
			//---------------------------------------------------------------------------------------------------//

			//self::$porcentaje_por_grupo_afectado_por_preferencias = clone $porcentaje_por_grupo;  //--> LINEA ORIGINAL
			
			$afectacion_score           = SQLConnection::obtenerPorcentajeScorePorAfectacion();
			//----------------------------------------------------------------------------------------------//
			$afectacion_score_ordenada  = [];
			foreach($afectacion_score as $key => $value){
				$afectacion_score_ordenada[$value->afecta_directo] = $value;
			}
			$link_pdf = env('HOST_NAS').'/'.substr($cuit, 0, 2).'/'.substr($cuit, 2, 3).'/'.substr($cuit, 5, 3).'/'.$cuit.'.pdf';
			self::$tiene_pdf = file_exists($link_pdf);
			$card_fiscales = '';
			if($p_fisica){
				$card_fiscales = SQLConnection::obtenerCardFiscalesPF($cuit);
			}else{
				$card_fiscales = SQLConnection::obtenerCardFiscales($cuit);
			}
			if (!self::$tiene_pdf && sizeof(array($card_fiscales)) == 0){
				self::$observado = true;
			}
		
			if($calcular_balance == true){
				$score_contables        = SQLConnection::obtenerScoreContable($cuit);
				self::$score_contables = $score_contables;
			}
			if($calcular_balance == true && isset (self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ){
				$score = 65.8;
			}
		
		
			if(!$p_fisica){
				$respuesta          = self::calcularScorePersonaJuridica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$afectacion_score_ordenada,$numero_cliente);
			}else{
				self::$cuit = $cuit;
				self::$edad     = Misc::obtenerEdadPersonaFisica($cuit);
				if (self::$edad >= 18 || self::$edad == null) {
					$respuesta          = self::calcularScorePersonaFisica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$afectacion_score_ordenada,$numero_cliente);
					$menor_de_edad = false;
				} else {
					$respuesta['score']                      = 0;
					$respuesta['afecta_directo']             = [];
					$respuesta['afecta_directo']['total']    = 0;
					$respuesta['afecta_directo']['debug']    = '';
					$respuesta['afecta_indirecto']           = [];
					$respuesta['afecta_indirecto']['debug']  = '';
					$menor_de_edad = true;
				}	
			}

			if($calcular_balance == true && isset (self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ){
				$respuesta = self::calcularScoreBalance($respuesta,false,self::$porcentaje_por_grupo_afectado_por_preferencias->contable);
			}
		
			if(is_array($respuesta['afecta_indirecto']['debug'])) {
				array_push($respuesta['afecta_indirecto']['debug'],"------------------------------------------------------------");
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Judicial Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->judicial);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Cheques Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->cheques);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Cendeu Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->cendeu);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Fiscal Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->fiscal);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Formal Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->formal);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Contable Indirecto: ". (isset(self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ?  self::$porcentaje_por_grupo_afectado_por_preferencias->contable : 0));
			}
			$score = $respuesta["score"];
			if(isset($respuesta['afecta_directo']['debug']) && $respuesta['afecta_directo']['debug'] != ''){
				$debug_score = "Afectaciones Directas";
				$debug_score .= "<br> Monsanto: ".self::$monsanto."<br>";
				$debug_score .= "<br>";
				//echo(var_dump(array($respuesta['afecta_directo']['debug'])));die();
				//$debug_score .= implode('<br>',$respuesta['afecta_directo']['debug']);
				//echo(var_dump($respuesta['afecta_directo']['debug'])); die(); //--> debug
				//$debug_score .= implode('<br>',array($respuesta['afecta_directo']['debug'])); //--> original
				try {
					$debug_score .= implode('<br>',array($respuesta['afecta_directo']['debug']));
				} catch (\Throwable $th) {
					$debug_score .= implode('<br>',$respuesta['afecta_directo']['debug']);
				}
			
				$debug_score .= "<br>";
			}
			if(isset($respuesta['afecta_indirecto']['debug'])  && $respuesta['afecta_indirecto']['debug'] != '') {
				$debug_score .= "Afectaciones Indirectas";
				$debug_score .= "<br>";
				$debug_score .= implode('<br>',array($respuesta['afecta_indirecto']['debug']));
			}
		
			$score = number_format($score,1);
			$score = ($score >= 100) ? 100 : $score;
			$score =  ($score < 0) ? 0 : $score;
			if($score == 100){
				$score = 98;
			}
			//return $debug_score;
			return json_encode(['score'=>$score,'debug_score'=>$debug_score,'resp_constancia' => $resp_constancia]);

		} catch (\Throwable $th) {
			// \Throwable $th
			//die("ddd");
			if(ENV('SERVICIOS_AFIP') != true){
				SQLConnection::busquedaPadron($cuit,1);
				//AFIPController::obtenerPadron($cuit,false,'AR',$constancia_afip);
				$resp_constancia = AFIPController::obtenerConstanciaPDF($cuit);
			}else {
				$mensaje = $th->getMessage()." L: ".$th->getLine();
				SQLConnection::control_erores($seccion='COD: 5.11 -> ApiControllerV1', $nombre_funcion='obtenerServicioScore', $mensaje);
				// 'constancia deshabilitado'
				$resp_constancia['response'] = 'ERROR INTERNO SERVER COD: 5.11';
				$resp_constancia['constancia_error'] = false;
				// Si es persona fisica y no tenemos ni año ni fecha de nacimiento, y no se la puede completar con el padron electoral, entonces SI va a afip
				if ($p_fisica) { 
					$tiene_nac = SQLConnection::obtenerTieneNacimiento($cuit);
					if(isset($tiene_nac->tiene_nacimiento) && $tiene_nac->tiene_nacimiento == 0){
						$actualiza = SQLConnection::actualizarDatosConPadron($cuit,$user_id);
						if (!isset($actualiza->respuesta) || $actualiza->respuesta != 'ok') {
							SQLConnection::busquedaPadron($cuit,1);
							//AFIPController::obtenerPadron($cuit,false,'AR',$constancia_afip);
						}
					}
				}
			}
			//--  SE AGREGAR CAPTURA DE ERROR PARA EVITAR LA ROTURA TOTAL, EXISTE PROBLEMA PARA VERIFICAR LOS MOTIVOS DE RECHAZOS  --//
			try {
				if(self::$revisar_monsanto == true){
					$resp = SQLConnection::obtenerContraparteCla($cuit, 110864291);
					$contraparte    = $resp->contraparte;
					$resp = SQLConnection::controlExcelCla(110864291, $contraparte);
					
					if(isset($resp->detalle_killer) && $resp->detalle_killer != ''){
						self::$monsanto = 'Rechazo por '.$resp->detalle_killer;
					}
				}
			} catch (\Throwable $th) {
				self::$monsanto = 'Rechazo por No se pudieron obtener los motivos de rechazos.';
			}

			/* Si está fallecido o Sintomas de vitalidad = 0, el score da cero */
			$defuncion      = SQLConnection::obtenerDefuncion($cuit);
			if(isset($defuncion->fecha_deceso)){
				self::$monsanto = 'Rechazo por defunción';
				//echo("sale"); die();
				return json_encode(['score'=>0,'debug_score'=>'Fecha Deceso','resp_constancia' => $resp_constancia]);
			}

			$vitalidad =  SQLConnection::obtenerSintomasDeVitalidad($cuit);
		
			if(isset($vitalidad->vitalidad) && $vitalidad->vitalidad == 0){
				return json_encode(['score'=>0,'debug_score'=>'Sintomas de Vitalidad','resp_constancia' => $resp_constancia]);
			}
		
			$debug_score = '';
			// Obtener Bancos para calcular si amerita por situación uno y sumar al score
			// Se almacenan en variable de clase para ser reutilizadas en la pestaña de bancos
			$obtener_bancos = SQLConnection::obtenerBancos($cuit);
			$situacion_1    = Misc::ameritaPorSituacionUno($obtener_bancos);
			self::$amerita_situacion_1 = $situacion_1['amerita'];
			self::$cantidad_situacion_1 = $situacion_1['cantidad'];

			$tabla_score    = SQLConnection::obtenerTablaScore();

			$tabla_score_ordenada     = [];
			$score_ordenado = []; 

			foreach($tabla_score as $score){
				$score->cantidad = 0;
				$tabla_score_ordenada[$score->id_grupo][$score->codigo][] = $score;
			}

			$tabla_score_con_cantidades = $tabla_score_ordenada;
			$array_score_general    = SQLConnection::obtenerScore($cuit,$p_fisica);
			$score_fiscales         = SQLConnection::obtenerScoreFiscales($cuit,$p_fisica);
			$score = 70;
			foreach($array_score_general as $score_general){
				if($score_general->grupo ==2){
					$score_ordenado[$score_general->grupo][$score_general->codigo][$score_general->fecha][] = $score_general;
				}else{
					$score_ordenado[$score_general->grupo][$score_general->codigo][] = $score_general;
				}
			}
			//echo($cuit." - ");
			$porcentaje_por_grupo       = SQLConnection::obtenerPorcentajePorGrupo($cuit);
		
			//self::$porcentaje_por_grupo_afectado_por_preferencias = clone $porcentaje_por_grupo;  //--> LINEA ORIGINAL

			//------------------  SE AGREGA ESTA SECCION PORQUE DABA ERROR AL CLONAR OBJETO  --------------------//
			try {
				self::$porcentaje_por_grupo_afectado_por_preferencias = clone $porcentaje_por_grupo;
			} catch (\Throwable $th) {
				$porcentaje_por_grupo = $porcentaje_por_grupo_alternativo;
				self::$porcentaje_por_grupo_afectado_por_preferencias = clone $porcentaje_por_grupo_alternativo;
			}
			//---------------------------------------------------------------------------------------------------//
			$afectacion_score           = SQLConnection::obtenerPorcentajeScorePorAfectacion();
			//----------------------------------------------------------------------------------------------//
			$afectacion_score_ordenada  = [];
			foreach($afectacion_score as $key => $value){
				$afectacion_score_ordenada[$value->afecta_directo] = $value;
			}
			$link_pdf = env('HOST_NAS').'/'.substr($cuit, 0, 2).'/'.substr($cuit, 2, 3).'/'.substr($cuit, 5, 3).'/'.$cuit.'.pdf';
			self::$tiene_pdf = file_exists($link_pdf);
			$card_fiscales = '';
			if($p_fisica){
				$card_fiscales = SQLConnection::obtenerCardFiscalesPF($cuit);
			}else{
				$card_fiscales = SQLConnection::obtenerCardFiscales($cuit);
			}

			if (!self::$tiene_pdf && sizeof(array($card_fiscales)) == 0){
				self::$observado = true;
			}
		
			if($calcular_balance == true){
				$score_contables        = SQLConnection::obtenerScoreContable($cuit);
				self::$score_contables = $score_contables;
			}

			if($calcular_balance == true && isset (self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ){
				$score = 65.8;
			}
		
		
			if(!$p_fisica){
				$respuesta          = self::calcularScorePersonaJuridica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$afectacion_score_ordenada,$numero_cliente);
			}else{
				self::$cuit = $cuit;
				self::$edad     = Misc::obtenerEdadPersonaFisica($cuit);
				if (self::$edad >= 18 || self::$edad == null) {
					$respuesta          = self::calcularScorePersonaFisica($score,$porcentaje_por_grupo,$score_ordenado,$tabla_score_con_cantidades,$afectacion_score_ordenada,$numero_cliente);
					$menor_de_edad = false;
				} else {
					$respuesta['score']                      = 0;
					$respuesta['afecta_directo']             = [];
					$respuesta['afecta_directo']['total']    = 0;
					$respuesta['afecta_directo']['debug']    = '';
					$respuesta['afecta_indirecto']           = [];
					$respuesta['afecta_indirecto']['debug']  = '';
					$menor_de_edad = true;
				}	
			}
			if($calcular_balance == true && isset (self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ){
				$respuesta = self::calcularScoreBalance($respuesta,false,self::$porcentaje_por_grupo_afectado_por_preferencias->contable);
			}
		
			if(is_array($respuesta['afecta_indirecto']['debug'])) {
				array_push($respuesta['afecta_indirecto']['debug'],"------------------------------------------------------------");
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Judicial Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->judicial);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Cheques Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->cheques);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Cendeu Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->cendeu);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Fiscal Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->fiscal);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Formal Indirecto: ".self::$porcentaje_por_grupo_afectado_por_preferencias->formal);
				array_push($respuesta['afecta_indirecto']['debug'],"Máximo Contable Indirecto: ". (isset(self::$porcentaje_por_grupo_afectado_por_preferencias->contable) ?  self::$porcentaje_por_grupo_afectado_por_preferencias->contable : 0));
			}

			$score = $respuesta["score"];
			
			if(isset($respuesta['afecta_directo']['debug']) && $respuesta['afecta_directo']['debug'] != ''){
				$debug_score = "Afectaciones Directas";
				$debug_score .= "<br> Monsanto: ".self::$monsanto."<br>";
				$debug_score .= "<br>";
				//echo(var_dump(array($respuesta['afecta_directo']['debug'])));die();
				//$debug_score .= implode('<br>',$respuesta['afecta_directo']['debug']);
				//echo(var_dump($respuesta['afecta_directo']['debug'])); die(); //--> debug
				//$debug_score .= implode('<br>',array($respuesta['afecta_directo']['debug'])); //--> original
				try {
					$debug_score .= implode('<br>',array($respuesta['afecta_directo']['debug']));
				} catch (\Throwable $th) {
					$debug_score .= implode('<br>',$respuesta['afecta_directo']['debug']);
				}
			
				$debug_score .= "<br>";
			}
			if(isset($respuesta['afecta_indirecto']['debug'])  && $respuesta['afecta_indirecto']['debug'] != '') {
				$debug_score .= "Afectaciones Indirectas";
				$debug_score .= "<br>";
				$debug_score .= implode('<br>',array($respuesta['afecta_indirecto']['debug']));
			}
		
			$score = number_format($score,1);
			$score = ($score >= 100) ? 100 : $score;
			$score =  ($score < 0) ? 0 : $score;
			if($score == 100){
				$score = 98;
			}
			//return $debug_score;
			return json_encode(['score'=>$score,'debug_score'=>$debug_score,'resp_constancia' => $resp_constancia]);
		}

		//-------------------------------------------------  FIN  --------------------------------------------------------//
	}

	public static function icNse() {
		$usuario = Session::get('usuario');
		//
		$cuit = trim(isset($_POST['tax_id']) ? $_POST['tax_id'] : (isset($_POST['TAX_ID']) ? $_POST['TAX_ID'] : ''));
		$apikey = trim(isset($_POST['apikey']) ? $_POST['apikey'] : (isset($_POST['APIKEY']) ? $_POST['APIKEY'] : ''));
		//
		if($usuario->producto == env('NRO_PRODUCTO_NSE')) {
			try {
				
				$tipo_persona_nse   = (substr($cuit,0,1) != '3') ? 'f' : 'j';
				/* 22/07/2021 Agregamos que pase por afip */
				if(!empty($cuit) && strlen($cuit) == 11){
					AFIPController::obtenerPadron($cuit,true,'AR',false);
				}
				//				
				$user_id = $usuario->user_id;

				// AGB por favor transaccionar el ID producto que corresponde a cada APIKEY . Está usando fijo el 55 y ese producto se llama
				// informe comercial Teipesa. Creditsafe y Mati usan esta ruta con diferentes apikey y con el producto 79
				// Luego hay que actualizar la base de datos para que los consumos del 55 se muevan al 79 para estos dos clientes
				// El apikey se controla en api.php pero el producto del apikey se ignora.

				$producto = $usuario->producto ?? 55;
				//$p_ip   = $_SERVER['REMOTE_ADDR'];
				//$csa = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$cuit,$producto,$p_ip),'selectOne');
				$csa = self::consumir_servicio($cuit,$producto);

				//SQLConnection::consumirServicio($user_id,$cuit,55);

				if(!$apikey){
					$apikey = Request::input('apikey');
				}
				$user_id        = 0;
				$persona        = new stdClass();
				$configuracion  = [];
				$cuit_validado 	= Misc::validarCuit($cuit);

				if(!$cuit_validado){
					return json_encode(['error'=>'Cuit Inválido']);
				}
				
				$respuesta      = json_decode(self::obtenerServicioScore_Cla($cuit,true,false));
				$idp            = SQLConnection::obtenerIdPadron($cuit);
				$id_padron      = $idp->id_padron;

				//obtengo la configuración para este cliente/usuario y veo que secciones le habilito
				if($apikey){
					$configuracion = SQLConnection::backendStoreProcedure('api_obtener_configuracion_secciones',array($apikey),true);
				}
	
				//si tiene la configuración de formales, tomamos todos los datos posibles del formales. (defunción, domicilios, datos personales. etc.)
				if ($configuracion!==NULL && $configuracion->formales == true){
					//definicion de variables compartidas.
					$nombre             = '';			
					$defuncion          = SQLConnection::backendStoreProcedure('obtener_defuncion',array($cuit),true);
					$fisica_juridica    = Misc::tipoPersona($cuit);
					$p_fisica           = ($fisica_juridica == 'F') ? 'FISICA' : 'JURIDICA';
					$persona->formales  = new stdClass();
					$persona->formales->tipo_persona = $p_fisica;

					$telefonos          = SQLConnection::backendStoreProcedure('obtener_telefono', array($id_padron));
					$persona->formales->identificacion = $cuit;
					if($fisica_juridica == 'F'){
						$datos_persona                      = SQLConnection::backendStoreProcedure('obtener_persona', array($cuit),true);
						//$nombre                             = $datos_persona->nombre_persona;
						//-- Modificacion separacion de nombre, pedido del cliente. ------------------
						$nombre_completo                             = $datos_persona->nombre_persona;
						$apellidos_c = $datos_persona->apellidos;
						$nombres_c = $datos_persona->nombres;
						//-----------------------------------------------------------------------------
						$dni                                = (int)substr($cuit, 2,-1);
						$empleado_de                        = SQLConnection::backendStoreProcedure('obtener_empleado_de', array($cuit));
						$persona->formales->dni             = (string)$dni;
						$persona->formales->telefonos       = $telefonos;
						$persona->formales->sexo            = $datos_persona->sexo;
						$persona->formales->anio_nacimiento = $datos_persona->anio_nacimiento;
						$persona->formales->nacionalidad    = ''; // en www2 estaba sacada esta linea
						$persona->formales->ejemplar        = '';
						$persona->formales->defuncion = new stdClass();

						if(!empty($datos_persona->fecha_nacimiento)){
							$edad = Misc::calcularEdad($datos_persona->fecha_nacimiento);
							if($edad){
								$persona->formales->edad = $edad;
							}
						}

						$persona->formales->empleado_de       = $empleado_de;
						$persona->formales->profesion         = $datos_persona->profesion;
						$persona->formales->fecha_nacimiento  = $datos_persona->fecha_nacimiento;
						$persona->formales->estado_civil      = $datos_persona->estado_civil;
						
						$persona->formales->defuncion->fuente       = !empty($defuncion->fuente)        ? $defuncion->fuente : '-' ;
						$persona->formales->defuncion->fecha_deceso = !empty($defuncion->fecha_deceso)  ? $defuncion->fecha_deceso : '-'  ;
						$persona->formales->defuncion->defuncion    = !empty($defuncion->defuncion)     ? $defuncion->defuncion : '-'  ;

					} else{
						$nombre       			= SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
						$sociedades 			= SQLConnection::backendStoreProcedure('obtener_sociedades', array($cuit));
						$info_empresa_formales 	= [];
						$card_empleados = SQLConnection::backendStoreProcedure('obtener_empleados', array($cuit),'selectOne');

						if(isset($card_empleados->total)){
							$card_empleados->total = (int)$card_empleados->total;
						}
						$persona->formales->empleados = $card_empleados;

						foreach ($sociedades as $key => $value) {
							$info_empresa_formales[$key] = new stdClass();
							$info_empresa_formales[$key]->ramo 							= $value->ramo; 
							$info_empresa_formales[$key]->subramo 						= $value->subramo; 
							$info_empresa_formales[$key]->fecha_contrato_social 		= $value->fecha_cons; 
							$info_empresa_formales[$key]->capital 						= (int)$value->capital; 
						}
						$persona->formales->mas_info = $info_empresa_formales;
						$claes_info    	= SQLConnection::backendStoreProcedure('obtener_clae', array($cuit));
						$claes 			= [];
						foreach ($claes_info as $key => $value) {
							$claes[$key] 				= new stdClass();
							$claes[$key]->cod_clae 		= $value->cod_clae; 
							$claes[$key]->descripcion 	= $value->descripcion; 
						}
						$persona->formales->claes = $claes;
					}
					//-- Modificacion separacion de nombre, pedido del cliente. ------------------
					if($fisica_juridica == 'F') {
						$persona->formales->nombre = $nombre_completo;
						$persona->formales->apellidos_persona = $apellidos_c;
						$persona->formales->nombres_persona = $nombres_c;
					} else {
						$persona->formales->nombre  = $nombre;	
						$persona->formales->apellidos_persona = 'null';
						$persona->formales->nombres_persona = 'null';
					}
					//$persona->formales->nombre  = $nombre;
					//----------------------------------------------------------------------------
				
					$persona->formales->domicilios 	= new stdClass();
					$domicilios          			= SQLConnection::backendStoreProcedure('sp_obtener_domicilios', array($cuit));

					if(!empty($domicilios)){
						foreach ($domicilios as $key => $value) {
							$domicilios[$key]->provincia  = $domicilios[$key]->prv_nombre;
							$domicilios[$key]->localidad  = $domicilios[$key]->loc_nombre;
							$domicilios[$key]->pais       = $domicilios[$key]->pai_nombre;
							$domicilios[$key]->cp         = $domicilios[$key]->codpos;
							unset($domicilios[$key]->prv_nombre);
							unset($domicilios[$key]->loc_nombre);
							unset($domicilios[$key]->pai_nombre);
							unset($domicilios[$key]->codpos);
							unset($domicilios[$key]->id);
							unset($domicilios[$key]->tipo_domicilio);
							unset($domicilios[$key]->created);
						}
						$persona->formales->domicilios = $domicilios;
					}
					//      $persona->formales->defuncion->defuncion    = empty($defuncion->defuncion) ? '-' : $defuncion ;
				}

				$participaciones  = [];
				//$vinculaciones    = []; // estaba wn www2
				//$relaciones       = []; // estaba wn www2 
				
				//--  Información socios/directores/sociedades.  --//
				if ($configuracion!==NULL && $configuracion->relaciones  == true){
					$persona->relaciones = new stdClass();
					$persona->relaciones->socios          = [];
					$persona->relaciones->participaciones = [];
					$persona->relaciones->vinculaciones   = [];
					if($fisica_juridica == 'F'){
						$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
						$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
						$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));

					}else{
						$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
						$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
						$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));
					}
					$i = 0;
					foreach($participaciones as $key => $value){
						$persona->relaciones->participaciones[$i] = new stdClass();
						$persona->relaciones->participaciones[$i]->razon_social_sociedad  	= $value->nombre_sociedad;
						$persona->relaciones->participaciones[$i]->cuit_sociedad          	= $value->cuit_sociedad;
						$persona->relaciones->participaciones[$i]->cuit_socio             	= $value->cuit_socio;
						$persona->relaciones->participaciones[$i]->nombre_socio           	= $value->nombre_socio;
						$persona->relaciones->participaciones[$i]->cargo                  	= $value->cargo;
						$i++;
					}

					$i = 0;
					foreach($relaciones as $key => $value){
						$persona->relaciones->socios[$i] = new stdClass();
						$persona->relaciones->socios[$i]->cuit            = $value->cuit;
						$persona->relaciones->socios[$i]->pais            = $value->country_name;
						$persona->relaciones->socios[$i]->nombre_persona  = $value->nombre_persona;
						$persona->relaciones->socios[$i]->cargo           = $value->car_nombre;
						$persona->relaciones->socios[$i]->desde           = $value->c04_periodo_desde;
						$persona->relaciones->socios[$i]->hasta           = $value->c04_periodo_hasta;
						$i++;
					} 
					$i = 0;
					foreach($vinculaciones as $key => $value){
						$persona->relaciones->vinculaciones[$i] = new stdClass();
						$persona->relaciones->vinculaciones[$i]->cuit            = $value->cuit_vinculada;
						$persona->relaciones->vinculaciones[$i]->nombre_persona  = $value->nombre_persona;
						$persona->relaciones->vinculaciones[$i]->tipo            = $value->nombre;
						$persona->relaciones->vinculaciones[$i]->detalle         = $value->detalle;
						$i++;
					}
				}

				//--  comerciales  --//
				if ($configuracion!==NULL && $configuracion->comerciales == true){
					$persona->comerciales = new stdClass(); 
					$consultas_ramos  = SQLConnection::backendStoreProcedure('obtener_consulta_por_ramos', array($cuit,12));
					$seguros          = SQLConnection::backendSeguros($cuit);
					$marcas           = SQLConnection::backendStoreProcedure('obtener_marcas', array($cuit));
					$consultas = [];
					if($consultas_ramos){
						foreach($consultas_ramos as $key_ramo => $consulta){
						$consultas[$key_ramo]['nombre']    = $consulta->descripcion;
						$consultas[$key_ramo][$consulta->antiguedad]  = $consulta->cantidad;
						}
						foreach($consultas as $key => $consulta){
							if(!isset($consultas[$key]['entre_0_1'])){
								$consultas[$key]['entre_0_1'] = 0;
							}
							if(!isset($consultas[$key]['entre_1_2'])){
								$consultas[$key]['entre_1_2'] = 0;
							}
							if(!isset($consultas[$key]['entre_2_5'])){
								$consultas[$key]['entre_2_5'] = 0;
							}
							ksort($consultas[$key]);
						}
					}
					if(!empty($marcas)){
						foreach ($marcas as $key => $value) {
							unset($value->num_boletin);
							unset($value->directorio);
							unset($value->web);
							unset($value->fecha_publicacion);
							unset($value->encontrada);
						}
					}
					foreach ($seguros as $key => $value) {
						unset($seguros[$key]->seg_codigo);
						unset($seguros[$key]->rie_codigo);
						unset($seguros[$key]->id_seguros);
						unset($seguros[$key]->id_padron);
						unset($seguros[$key]->visible);
						unset($seguros[$key]->estado);
					}
					$persona->comerciales->consultas  = $consultas;
					$persona->comerciales->seguros    = $seguros;
					$persona->comerciales->marcas     = $marcas;
				}

				//--  balances  --//
				if ($configuracion!==NULL && $configuracion->contables == true){
					//$MainController = new MainController();
					$persona->balances = [];
					$persona->balances  = SQLConnection::backendStoreProcedure('api_obtener_balances', array($cuit));
				}

				//--  fiscales  --//
				if ($configuracion!==NULL && $configuracion->fiscales == true){
					$persona->fiscales = new stdClass();
					$claes             = SQLConnection::backendStoreProcedure('obtener_clae', array($cuit));
					$inscripciones     = SQLConnection::backendStoreProcedure('obtener_inscripciones', array($cuit));
					$impuestos         = SQLConnection::backendStoreProcedure('obtener_padron_impuestos', array($id_padron));
					$apocrifas         = SQLConnection::backendStoreProcedure('obtener_apocrifas', array($cuit));
					$sircreb           = SQLConnection::backendStoreProcedure('obtener_sircreb', array($cuit));
					$arba              = SQLConnection::backendStoreProcedure('obtener_arba', array($cuit));
					$aportes           = SQLConnection::backendStoreProcedure('backend_mis_aportes', array($cuit, NULL, 12, 1), false);

					$persona->fiscales->aportes             = $aportes;
					$persona->fiscales->clae                = $claes;
					$persona->fiscales->inscripciones       = $inscripciones;
					$persona->fiscales->impuestos           = $impuestos;
					$persona->fiscales->facturas_apocrifas  = $apocrifas;
					$persona->fiscales->sircreb             = $sircreb;
					$persona->fiscales->arba                = $arba;
				}

				//--  informacion de bancos y cheques  --//
				if ($configuracion!==NULL && $configuracion->bancos_y_cheques == true){
					$bancos = SQLConnection::backendStoreProcedure('backend_central_deudores', array($cuit,24,1));
					$persona->periodos = new stdClass();
					$periodo =  SQLConnection::backendStoreProcedure('obtener_periodo_maximo', array($cuit),'selectOne');
					$persona->periodos->bancos = Misc::convertirFormatoFecha($periodo->periodo_maximo,'Y-m-d','Ym');
					$persona->bancos  = [];
					foreach ($bancos as $key => $value) {
						
						$persona->bancos[$key] = new stdClass();
						$persona->bancos[$key]->codigo_entidad  = $value->codigo_ent;
						$persona->bancos[$key]->nombre_entidad  = $value->nombre;
						$persona->bancos[$key]->periodo         = $value->fec_inf;
						$persona->bancos[$key]->situacion       = $value->situacion;
						$persona->bancos[$key]->monto           = $value->total;
						$persona->bancos[$key]->dias_atraso     = $value->dia_atraso;
					}
					//}
					$persona->vinculados_segun_bcra = [];
					
					//informacion de cheques
					$cheques = SQLConnection::backendStoreProcedure('obtener_cheques', array($cuit));
					$i = 0;
					foreach ($cheques as $key => $value) {
						if($value->tipo == 'vinculaciones'){
							$persona->vinculados_segun_bcra[$i] = new stdClass();
							$persona->vinculados_segun_bcra[$i]->nombre_persona_firmante    = $value->nombre_persona_firmante;
							$persona->vinculados_segun_bcra[$i]->cuit_firmante              = $value->cuit_firmante;
							$persona->vinculados_segun_bcra[$i]->nombre_persona_relacionado = $value->nombre_persona_relacionado;
							$persona->vinculados_segun_bcra[$i]->Cuit_relacionado           = $value->Cuit_relacionado;
							$persona->vinculados_segun_bcra[$i]->cantidad_cheques_firmados  = $value->cantidad;
							$persona->vinculados_segun_bcra[$i]->cantidad_cheques_totales   = $value->total_cheques;
							unset($cheques[$i]);
							$i+=1;
						}else{
							unset($cheques[$key]->idp);
							unset($cheques[$key]->idppr);
							unset($cheques[$key]->cantidad);
							unset($cheques[$key]->total_cheques);
						}
					}

					$persona->cheques = $cheques;
				}

				//--  score_ic  --//
				$score = $respuesta->score;
				if ($configuracion!==NULL && $configuracion->score_ic  == true){
					$persona->score = new stdClass();
					$persona->score->valor = $score;
				}

				//--  comex  --//
				if ($configuracion!==NULL && $configuracion->comex == true) {
					$persona->comex = new stdClass();
					$impo     =  SQLConnection::backendStoreProcedure('obtener_comex', array($cuit),'select');
					$pais     =  SQLConnection::backendStoreProcedure('obtener_comex_pais', array($cuit),'select');
					$rubros   =  SQLConnection::backendStoreProcedure('obtener_comex_rubros', array($cuit),'select');
					$totales  =  SQLConnection::backendStoreProcedure('obtener_comex_totales', array($cuit),'selectOne');
					$persona->comex->importaciones = [];
					if(!empty($impo)){
						foreach ($impo as $key => $value) {
							$persona->comex->importaciones[$key] = new StdClass();
							$persona->comex->importaciones[$key]->fecha 		= $value->date;
							$persona->comex->importaciones[$key]->consumo 		= $value->consumo;
							$persona->comex->importaciones[$key]->deposito 		= $value->deposito;
							$persona->comex->importaciones[$key]->zonafranca	= $value->zonafranca;
							$persona->comex->importaciones[$key]->temporal 		= $value->temporal;
							$persona->comex->importaciones[$key]->total 		= $value->total;
						}
					}
					if(!empty($pais)){
						foreach ($pais as $key => $value) {
						$persona->comex->pais[$key] 				= new StdClass();
						$persona->comex->pais[$key]->tipo_operacion = $value->tipo_operacion;
						$persona->comex->pais[$key]->fob            = $value->fob;
						// $persona->comex->pais[$key]->nombre             = $value->nombre; // estaba en www2
						}
					}
					if(!empty($rubros)){

						foreach ($rubros as $key => $value) {
							$persona->comex->rubros[$key] = new StdClass();
							$persona->comex->rubros[$key]->tipo_operacion  = $value->tipo_operacion;
							$persona->comex->rubros[$key]->descripcion     = $value->descripcion;
							$persona->comex->rubros[$key]->fob             = $value->fob;
							$persona->comex->rubros[$key]->posicion        = $value->posicion;
						}
					}
					if(!empty($totales)){
						$persona->comex->totales = new StdClass();
						$persona->comex->totales->total_impo  = $totales->total_impo;
						$persona->comex->totales->total_expo  = $totales->total_expo;
					
					}
				}

				//-- Legales.. ??
				if ($configuracion!==NULL && $configuracion->legales == true) {
					$actor      =  SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null,'A',$cuit,60,1),'select');
					$demandado  =  SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null,'D',$cuit,60,1),'select');
					$persona->legales = new StdClass();
					$persona->legales->actor      = [];
					$persona->legales->demandado  = [];
					
					foreach ($actor as $key => $value) {
						$persona->legales->actor[$key] = new StdClass();
						$persona->legales->actor[$key]->fecha_causa   = $value->fecha_causa;
						$persona->legales->actor[$key]->nombre_causa  = $value->nombre_causa;
						$persona->legales->actor[$key]->cuit          = $value->cuit_otra_parte;
						$persona->legales->actor[$key]->nombre        = $value->nombre_padron_otra_parte;
						$persona->legales->actor[$key]->juzgado       = $value->juzgado;
						$persona->legales->actor[$key]->secretaria    = $value->secretaria;
					}
					
					foreach ($demandado as $key => $value) {
						$persona->legales->demandado[$key] = new StdClass();
						$persona->legales->demandado[$key]->fecha_causa   = $value->fecha_causa;
						$persona->legales->demandado[$key]->nombre_causa  = $value->nombre_causa;
						$persona->legales->demandado[$key]->cuit          = $value->cuit_otra_parte;
						$persona->legales->demandado[$key]->nombre        = $value->nombre_padron_otra_parte;
						$persona->legales->demandado[$key]->expediente    = $value->expediente;
						$persona->legales->demandado[$key]->juzgado       = $value->juzgado;
						$persona->legales->demandado[$key]->secretaria    = $value->secretaria;
					
					}
				}


				//-------------------------------------------  NIVEL SOCIO ECONOMICO  ---------------------------------------------------------------//

				//$respuesta  = json_decode(self::obtenerServicioScore($cuit,true,false));
				$score_nse      = $respuesta->score;
				/*if (strtoupper($tipo_persona_nse) == 'F' && $score_nse == 0){
					$nivel = new \StdClass();
					$nivel->rango_minimo = '0';
					$nivel->rango_maximo = '0';
				} else {
					$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021',array($cuit,$tipo_persona_nse,0,$usuario->cliente['client_id']),true);
					//$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico',array($cuit,$tipo_persona_nse),true);
				}*/ 
				
				$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021',array($cuit,$tipo_persona_nse,0,$usuario->cliente['client_id']),true);

				// si vienen null se los pasa directo a 0
				$nivel->rango_minimo = (is_null($nivel->rango_minimo)) ? '0' : $nivel->rango_minimo;
				$nivel->rango_maximo = (is_null($nivel->rango_maximo)) ? '0' : $nivel->rango_maximo;

				$rangos = array('rango_minimo' => $nivel->rango_minimo,'rango_maximo' => $nivel->rango_maximo);
				//$persona->NSE = $nivel;
				//$persona->NSE = $rangos;
				//AGB TRUCHADA PARA WORLDSYS

				/*if ($tipo_persona_nse == 'f'){
					$persona->NSE = $rangos;
				}
				else{
					$persona->NSE = array();
				}*/
				//
				$rangosFAE = array('fae_min' => $nivel->rango_minimo,'fae_max' => $nivel->rango_maximo);
				if ($tipo_persona_nse == 'f'){
					$persona->NSE = $rangos;
					$persona->FAE = array();
				}
				else{
					$persona->NSE = array();
					$persona->FAE = $rangosFAE;
				}

				//------------------------------------------------------------------------------------------------------------------------------------//

				return json_encode($persona);

			} catch (\Throwable $th) {

				$mensaje = 'Error al consultar API NSE fidelitas-wwww (posible cuit inexistente) <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Cuit Consultado: '.$cuit.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'ERROR','Message'=>'The provided national id does not match a valid tax id and could not be validated. Please review it and try again.']);

			}
		} 
		return json_encode(['response'=>'No posee acceso al producto.']);
	}
	//-----------------------------------------------------  FIN API NSE  ---------------------------------------------------------------------------------------------------------------//
	
	public static function icNse_14112022() {
		$usuario        = Session::get('usuario');

		$cuit = trim(isset($_POST['tax_id']) ? $_POST['tax_id'] : (isset($_POST['TAX_ID']) ? $_POST['TAX_ID'] : ''));
		$apikey = trim(isset($_POST['apikey']) ? $_POST['apikey'] : (isset($_POST['APIKEY']) ? $_POST['APIKEY'] : ''));

		if($usuario->producto == env('NRO_PRODUCTO_NSE')) {
			try {
				
				$tipo_persona_nse   = (substr($cuit,0,1) != '3') ? 'f' : 'j';
				/* 22/07/2021 Agregamos que pase por afip */
				if(!empty($cuit) && strlen($cuit) == 11){
					AFIPController::obtenerPadron($cuit,true,'AR',false);
				}

				
				$user_id        = $usuario->user_id;

				// AGB por favor transaccionar el ID producto que corresponde a cada APIKEY . Está usando fijo el 55 y ese producto se llama
				// informe comercial Teipesa. Creditsafe y Mati usan esta ruta con diferentes apikey y con el producto 79
				// Luego hay que actualizar la base de datos para que los consumos del 55 se muevan al 79 para estos dos clientes
				// El apikey se controla en api.php pero el producto del apikey se ignora.

				$producto       = $usuario->producto ?? 55;
				//$p_ip   = $_SERVER['REMOTE_ADDR'];
				//$csa = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$cuit,$producto,$p_ip),'selectOne');
				$csa = self::consumir_servicio($cuit,$producto);

				//SQLConnection::consumirServicio($user_id,$cuit,55);

				if(!$apikey){
					$apikey         = Request::input('apikey');
				}
				$user_id        = 0;
				$persona        = new stdClass();
				$configuracion  = [];
				$cuit_validado = Misc::validarCuit($cuit);

				if(!$cuit_validado){
					return json_encode(['error'=>'Cuit Inválido']);
				}
				
				$respuesta        = json_decode(self::obtenerServicioScore_Cla($cuit,true,false));
				$idp            = SQLConnection::obtenerIdPadron($cuit);
				$id_padron      = $idp->id_padron;

				//obtengo la configuración para este cliente/usuario y veo que secciones le habilito
				if($apikey){
					$configuracion = SQLConnection::backendStoreProcedure('api_obtener_configuracion_secciones',array($apikey),true);
				}
				
				//si tiene la configuración de formales, tomamos todos los datos posibles del formales. (defunción, domicilios, datos personales. etc.)
				if($configuracion->formales == true){
					//definicion de variables compartidas.
					$nombre             = '';
					
					$defuncion          = SQLConnection::backendStoreProcedure('obtener_defuncion',array($cuit),true);
					$fisica_juridica    = Misc::tipoPersona($cuit);
					$p_fisica           = ($fisica_juridica == 'F') ? 'FISICA' : 'JURIDICA';
					$persona->formales  = new stdClass();
					$persona->formales->tipo_persona = $p_fisica;

					$telefonos          = SQLConnection::backendStoreProcedure('obtener_telefono', array($id_padron));
					$persona->formales->identificacion = $cuit;
					if($fisica_juridica == 'F'){
						$datos_persona                      = SQLConnection::backendStoreProcedure('obtener_persona', array($cuit),true);
						//$nombre                             = $datos_persona->nombre_persona;
						//-- Modificacion separacion de nombre, pedido del cliente. ------------------
						$nombre_completo                             = $datos_persona->nombre_persona;
						$apellidos_c = $datos_persona->apellidos;
						$nombres_c = $datos_persona->nombres;
						//-----------------------------------------------------------------------------
						$dni                                = (int)substr($cuit, 2,-1);
						$empleado_de                        = SQLConnection::backendStoreProcedure('obtener_empleado_de', array($cuit));
						$persona->formales->dni             = (string)$dni;
						$persona->formales->telefonos       = $telefonos;
						$persona->formales->sexo            = $datos_persona->sexo;
						$persona->formales->anio_nacimiento = $datos_persona->anio_nacimiento;
						$persona->formales->nacionalidad    = ''; // en www2 estaba sacada esta linea
						$persona->formales->ejemplar        = '';
						$persona->formales->defuncion = new stdClass();

						if(!empty($datos_persona->fecha_nacimiento)){
							$edad = Misc::calcularEdad($datos_persona->fecha_nacimiento);
							if($edad){
								$persona->formales->edad = $edad;
							}
						}

						$persona->formales->empleado_de       = $empleado_de;
						$persona->formales->profesion         = $datos_persona->profesion;
						$persona->formales->fecha_nacimiento  = $datos_persona->fecha_nacimiento;
						$persona->formales->estado_civil      = $datos_persona->estado_civil;
						
						$persona->formales->defuncion->fuente       = !empty($defuncion->fuente)        ? $defuncion->fuente : '-' ;
						$persona->formales->defuncion->fecha_deceso = !empty($defuncion->fecha_deceso)  ? $defuncion->fecha_deceso : '-'  ;
						$persona->formales->defuncion->defuncion    = !empty($defuncion->defuncion)     ? $defuncion->defuncion : '-'  ;

					} else{
						$nombre       	= SQLConnection::obtenerRazonSocial($cuit)->nombre_persona;
						$sociedades 	= SQLConnection::backendStoreProcedure('obtener_sociedades', array($cuit));
						$info_empresa_formales = [];
						$card_empleados = SQLConnection::backendStoreProcedure('obtener_empleados', array($cuit),'selectOne');

						if(isset($card_empleados->total)){
							$card_empleados->total = (int)$card_empleados->total;
						}
						$persona->formales->empleados = $card_empleados;

						foreach ($sociedades as $key => $value) {
							$info_empresa_formales[$key] 								= new stdClass();
							$info_empresa_formales[$key]->ramo 							= $value->ramo; 
							$info_empresa_formales[$key]->subramo 						= $value->subramo; 
							$info_empresa_formales[$key]->fecha_contrato_social 		= $value->fecha_cons; 
							$info_empresa_formales[$key]->capital 						= (int)$value->capital; 
						}
						$persona->formales->mas_info = $info_empresa_formales;
						$claes_info    	= SQLConnection::backendStoreProcedure('obtener_clae', array($cuit));
						$claes 			= [];
						foreach ($claes_info as $key => $value) {
							$claes[$key] 				= new stdClass();
							$claes[$key]->cod_clae 		= $value->cod_clae; 
							$claes[$key]->descripcion 	= $value->descripcion; 
						}
						$persona->formales->claes = $claes;
					}
					//-- Modificacion separacion de nombre, pedido del cliente. ------------------
					if($fisica_juridica == 'F') {
						$persona->formales->nombre = $nombre_completo;
						$persona->formales->apellidos_persona = $apellidos_c;
						$persona->formales->nombres_persona = $nombres_c;
					} else {
						$persona->formales->nombre  = $nombre;	
						$persona->formales->apellidos_persona = 'null';
						$persona->formales->nombres_persona = 'null';
					}
					//$persona->formales->nombre  = $nombre;
					//----------------------------------------------------------------------------
				
					$persona->formales->domicilios = new stdClass();
					$domicilios          = SQLConnection::backendStoreProcedure('sp_obtener_domicilios', array($cuit));

					if(!empty($domicilios)){
						foreach ($domicilios as $key => $value) {
							$domicilios[$key]->provincia  = $domicilios[$key]->prv_nombre;
							$domicilios[$key]->localidad  = $domicilios[$key]->loc_nombre;
							$domicilios[$key]->pais       = $domicilios[$key]->pai_nombre;
							$domicilios[$key]->cp         = $domicilios[$key]->codpos;
							unset($domicilios[$key]->prv_nombre);
							unset($domicilios[$key]->loc_nombre);
							unset($domicilios[$key]->pai_nombre);
							unset($domicilios[$key]->codpos);
							unset($domicilios[$key]->id);
							unset($domicilios[$key]->tipo_domicilio);
							unset($domicilios[$key]->created);
						}
						$persona->formales->domicilios = $domicilios;
					}
					//      $persona->formales->defuncion->defuncion    = empty($defuncion->defuncion) ? '-' : $defuncion ;
				}

				$participaciones  = [];
				//$vinculaciones    = []; // estaba wn www2
				//$relaciones       = []; // estaba wn www2 
				
				//--  Información socios/directores/sociedades.  --//
				if($configuracion->relaciones  == true){
					$persona->relaciones = new stdClass();
					$persona->relaciones->socios          = [];
					$persona->relaciones->participaciones = [];
					$persona->relaciones->vinculaciones   = [];
					if($fisica_juridica == 'F'){
						$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
						$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
						$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));

					}else{
						$relaciones             = SQLConnection::backendStoreProcedure('obtener_socios_directores', array($cuit,$fisica_juridica));
						$participaciones        = SQLConnection::backendStoreProcedure('obtener_participacion_socios_directores', array($cuit));
						$vinculaciones          = SQLConnection::backendStoreProcedure('obtener_vinculaciones', array($cuit));
					}
					$i = 0;
					foreach($participaciones as $key => $value){
						$persona->relaciones->participaciones[$i]                = new stdClass();
						$persona->relaciones->participaciones[$i]->razon_social_sociedad  = $value->nombre_sociedad;
						$persona->relaciones->participaciones[$i]->cuit_sociedad          = $value->cuit_sociedad;
						$persona->relaciones->participaciones[$i]->cuit_socio             = $value->cuit_socio;
						$persona->relaciones->participaciones[$i]->nombre_socio           = $value->nombre_socio;
						$persona->relaciones->participaciones[$i]->cargo                  = $value->cargo;
						$i++;
					}

					$i = 0;
					foreach($relaciones as $key => $value){
						$persona->relaciones->socios[$i]                  = new stdClass();
						$persona->relaciones->socios[$i]->cuit            = $value->cuit;
						$persona->relaciones->socios[$i]->pais            = $value->country_name;
						$persona->relaciones->socios[$i]->nombre_persona  = $value->nombre_persona;
						$persona->relaciones->socios[$i]->cargo           = $value->car_nombre;
						$persona->relaciones->socios[$i]->desde           = $value->c04_periodo_desde;
						$persona->relaciones->socios[$i]->hasta           = $value->c04_periodo_hasta;
						$i++;
					} 
					$i = 0;
					foreach($vinculaciones as $key => $value){
						$persona->relaciones->vinculaciones[$i]                  = new stdClass();
						$persona->relaciones->vinculaciones[$i]->cuit            = $value->cuit_vinculada;
						$persona->relaciones->vinculaciones[$i]->nombre_persona  = $value->nombre_persona;
						$persona->relaciones->vinculaciones[$i]->tipo            = $value->nombre;
						$persona->relaciones->vinculaciones[$i]->detalle         = $value->detalle;
						$i++;
					}
				}


				//--  comerciales  --//
				if($configuracion->comerciales == true){
					$persona->comerciales          = new stdClass(); 
					$consultas_ramos  = SQLConnection::backendStoreProcedure('obtener_consulta_por_ramos', array($cuit,12));
					$seguros          = SQLConnection::backendSeguros($cuit);
					$marcas           = SQLConnection::backendStoreProcedure('obtener_marcas', array($cuit));
					$consultas = [];
					if($consultas_ramos){
						foreach($consultas_ramos as $key_ramo => $consulta){
						$consultas[$key_ramo]['nombre']    = $consulta->descripcion;
						$consultas[$key_ramo][$consulta->antiguedad]  = $consulta->cantidad;
						}
						foreach($consultas as $key => $consulta){
							if(!isset($consultas[$key]['entre_0_1'])){
								$consultas[$key]['entre_0_1'] = 0;
							}
							if(!isset($consultas[$key]['entre_1_2'])){
								$consultas[$key]['entre_1_2'] = 0;
							}
							if(!isset($consultas[$key]['entre_2_5'])){
								$consultas[$key]['entre_2_5'] = 0;
							}
							ksort($consultas[$key]);
						}
					}
					if(!empty($marcas)){
						foreach ($marcas as $key => $value) {
							unset($value->num_boletin);
							unset($value->directorio);
							unset($value->web);
							unset($value->fecha_publicacion);
							unset($value->encontrada);
						}
					}
					foreach ($seguros as $key => $value) {
						unset($seguros[$key]->seg_codigo);
						unset($seguros[$key]->rie_codigo);
						unset($seguros[$key]->id_seguros);
						unset($seguros[$key]->id_padron);
						unset($seguros[$key]->visible);
						unset($seguros[$key]->estado);
					}
					$persona->comerciales->consultas  = $consultas;
					$persona->comerciales->seguros    = $seguros;
					$persona->comerciales->marcas     = $marcas;
				}

				//--  balances  --//
				if($configuracion->contables == true){
					//$MainController = new MainController();
					$persona->balances = [];
					$persona->balances  = SQLConnection::backendStoreProcedure('api_obtener_balances', array($cuit));
				}

				//--  fiscales  --//
				if($configuracion->fiscales == true){
					$persona->fiscales = new stdClass();
					$claes             = SQLConnection::backendStoreProcedure('obtener_clae', array($cuit));
					$inscripciones     = SQLConnection::backendStoreProcedure('obtener_inscripciones', array($cuit));
					$impuestos         = SQLConnection::backendStoreProcedure('obtener_padron_impuestos', array($id_padron));
					$apocrifas         = SQLConnection::backendStoreProcedure('obtener_apocrifas', array($cuit));
					$sircreb           = SQLConnection::backendStoreProcedure('obtener_sircreb', array($cuit));
					$arba              = SQLConnection::backendStoreProcedure('obtener_arba', array($cuit));
					$aportes           = SQLConnection::backendStoreProcedure('backend_mis_aportes', array($cuit, NULL, 12, 1), false);

					$persona->fiscales->aportes             = $aportes;
					$persona->fiscales->clae                = $claes;
					$persona->fiscales->inscripciones       = $inscripciones;
					$persona->fiscales->impuestos           = $impuestos;
					$persona->fiscales->facturas_apocrifas  = $apocrifas;
					$persona->fiscales->sircreb             = $sircreb;
					$persona->fiscales->arba                = $arba;
				}

				//--  informacion de bancos y cheques  --//
				if($configuracion->bancos_y_cheques == true){
					$bancos = SQLConnection::backendStoreProcedure('backend_central_deudores', array($cuit,24,1));
					$persona->periodos = new stdClass();
					$periodo =  SQLConnection::backendStoreProcedure('obtener_periodo_maximo', array($cuit),'selectOne');
					$persona->periodos->bancos = Misc::convertirFormatoFecha($periodo->periodo_maximo,'Y-m-d','Ym');
					$persona->bancos  = [];
					foreach ($bancos as $key => $value) {
						
						$persona->bancos[$key]  = new stdClass();
						$persona->bancos[$key]->codigo_entidad  = $value->codigo_ent;
						$persona->bancos[$key]->nombre_entidad  = $value->nombre;
						$persona->bancos[$key]->periodo         = $value->fec_inf;
						$persona->bancos[$key]->situacion       = $value->situacion;
						$persona->bancos[$key]->monto           = $value->total;
						$persona->bancos[$key]->dias_atraso     = $value->dia_atraso;
					}
					//}
					$persona->vinculados_segun_bcra = [];
					
					//informacion de cheques
					$cheques = SQLConnection::backendStoreProcedure('obtener_cheques', array($cuit));
					$i = 0;
					foreach ($cheques as $key => $value) {
						if($value->tipo == 'vinculaciones'){
							$persona->vinculados_segun_bcra[$i] = new stdClass();
							$persona->vinculados_segun_bcra[$i]->nombre_persona_firmante     = $value->nombre_persona_firmante;
							$persona->vinculados_segun_bcra[$i]->cuit_firmante               = $value->cuit_firmante;
							$persona->vinculados_segun_bcra[$i]->nombre_persona_relacionado  = $value->nombre_persona_relacionado;
							$persona->vinculados_segun_bcra[$i]->Cuit_relacionado            = $value->Cuit_relacionado;
							$persona->vinculados_segun_bcra[$i]->cantidad_cheques_firmados   = $value->cantidad;
							$persona->vinculados_segun_bcra[$i]->cantidad_cheques_totales    = $value->total_cheques;
							unset($cheques[$i]);
							$i+=1;
						}else{
							unset($cheques[$key]->idp);
							unset($cheques[$key]->idppr);
							unset($cheques[$key]->cantidad);
							unset($cheques[$key]->total_cheques);
						}
					}
				
					$persona->cheques = $cheques;

				}

				//--  score_ic  --//
				$score = $respuesta->score;
				if($configuracion->score_ic  == true){
					$persona->score = new stdClass();
					$persona->score->valor = $score;
				}

				//--  comex  --//
				if($configuracion->comex == true) {
					$persona->comex = new stdClass();
					$impo     =  SQLConnection::backendStoreProcedure('obtener_comex', array($cuit),'select');
					$pais     =  SQLConnection::backendStoreProcedure('obtener_comex_pais', array($cuit),'select');
					$rubros   =  SQLConnection::backendStoreProcedure('obtener_comex_rubros', array($cuit),'select');
					$totales  =  SQLConnection::backendStoreProcedure('obtener_comex_totales', array($cuit),'selectOne');
					$persona->comex->importaciones = [];
					if(!empty($impo)){
						foreach ($impo as $key => $value) {
							$persona->comex->importaciones[$key] = new StdClass();
							$persona->comex->importaciones[$key]->fecha = $value->date;
							$persona->comex->importaciones[$key]->consumo = $value->consumo;
							$persona->comex->importaciones[$key]->deposito = $value->deposito;
							$persona->comex->importaciones[$key]->zonafranca = $value->zonafranca;
							$persona->comex->importaciones[$key]->temporal = $value->temporal;
							$persona->comex->importaciones[$key]->total = $value->total;
						}
					}
					if(!empty($pais)){
						foreach ($pais as $key => $value) {
						$persona->comex->pais[$key] = new StdClass();
						$persona->comex->pais[$key]->tipo_operacion  = $value->tipo_operacion;
						$persona->comex->pais[$key]->fob             = $value->fob;
						// $persona->comex->pais[$key]->nombre             = $value->nombre; // estaba en www2
						}
					}
					if(!empty($rubros)){

						foreach ($rubros as $key => $value) {
							$persona->comex->rubros[$key] = new StdClass();
							$persona->comex->rubros[$key]->tipo_operacion  = $value->tipo_operacion;
							$persona->comex->rubros[$key]->descripcion     = $value->descripcion;
							$persona->comex->rubros[$key]->fob             = $value->fob;
							$persona->comex->rubros[$key]->posicion        = $value->posicion;
						}
					}
					if(!empty($totales)){
						$persona->comex->totales = new StdClass();
						$persona->comex->totales->total_impo  = $totales->total_impo;
						$persona->comex->totales->total_expo  = $totales->total_expo;
					
					}
				}

				//-- Legales.. ??
				if($configuracion->legales == true) {
					$actor      =  SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null,'A',$cuit,60,1),'select');
					$demandado  =  SQLConnection::backendStoreProcedure('obtener_juicios_demandado_actor', array(null,'D',$cuit,60,1),'select');
					$persona->legales = new StdClass();
					$persona->legales->actor      = [];
					$persona->legales->demandado  = [];
					
					foreach ($actor as $key => $value) {
						$persona->legales->actor[$key] = new StdClass();
						$persona->legales->actor[$key]->fecha_causa   = $value->fecha_causa;
						$persona->legales->actor[$key]->nombre_causa  = $value->nombre_causa;
						$persona->legales->actor[$key]->cuit          = $value->cuit_otra_parte;
						$persona->legales->actor[$key]->nombre        = $value->nombre_padron_otra_parte;
						$persona->legales->actor[$key]->juzgado       = $value->juzgado;
						$persona->legales->actor[$key]->secretaria    = $value->secretaria;
					}
					
					foreach ($demandado as $key => $value) {
						$persona->legales->demandado[$key] = new StdClass();
						$persona->legales->demandado[$key]->fecha_causa   = $value->fecha_causa;
						$persona->legales->demandado[$key]->nombre_causa  = $value->nombre_causa;
						$persona->legales->demandado[$key]->cuit          = $value->cuit_otra_parte;
						$persona->legales->demandado[$key]->nombre        = $value->nombre_padron_otra_parte;
						$persona->legales->demandado[$key]->expediente    = $value->expediente;
						$persona->legales->demandado[$key]->juzgado       = $value->juzgado;
						$persona->legales->demandado[$key]->secretaria    = $value->secretaria;
					
					}
				}

				//-------------------------------------------  NIVEL SOCIO ECONOMICO  ---------------------------------------------------------------//

				//$respuesta  = json_decode(self::obtenerServicioScore($cuit,true,false));
				$score_nse      = $respuesta->score;
				/*if (strtoupper($tipo_persona_nse) == 'F' && $score_nse == 0){
					$nivel = new \StdClass();
					$nivel->rango_minimo = '0';
					$nivel->rango_maximo = '0';
				} else {
					$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021',array($cuit,$tipo_persona_nse,0,$usuario->cliente['client_id']),true);
					//$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico',array($cuit,$tipo_persona_nse),true);
				}*/

				$nivel= SQLConnection::backendStoreProcedure('obtener_nivel_socioeconomico_2021',array($cuit,$tipo_persona_nse,0,$usuario->cliente['client_id']),true);
				// si vienen null se los pasa directo a 0
				$nivel->rango_minimo = (is_null($nivel->rango_minimo)) ? '0' : $nivel->rango_minimo;
				$nivel->rango_maximo = (is_null($nivel->rango_maximo)) ? '0' : $nivel->rango_maximo;
				
				$rangos = array('rango_minimo' => $nivel->rango_minimo,'rango_maximo' => $nivel->rango_maximo);
				//$persona->NSE = $nivel;
				//AGB TRUCHADA PARA WORLDSYS
				
				if ($tipo_persona == 'f'){
					$persona->NSE = $rangos;
				}
				else{
					$persona->NSE = '';
				}
				//------------------------------------------------------------------------------------------------------------------------------------//

				return json_encode($persona);

			} catch (\Throwable $th) {

				$mensaje = 'Error al consultar API NSE fidelitas2 <br>Producto: '.$usuario->producto.'<br>Cliente: '.$usuario->cliente['client_id'].'<br>User_Id: '.$usuario->user_id.'<br>Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
				Misc::enviarMail_errores_api($mensaje);
				return json_encode(['Status'=>'INTERNAL ERROR','Message'=>'TIMEOUT EXCEEDED']);

			}
		} 
		return json_encode(['response'=>'No posee acceso al producto.']);
	}
	//-----------------------------------------------------  FIN API NSE  ---------------------------------------------------------------------------------------------------------------//

	//--  NUEVA VERSION A PEDIDO  --//
	public static function obtenerICXML3(){
		$nn = self::ICSinGraficos();
		header('Content-Type: application/xml');
		$cuit     = Request::input('cuit');
		$apikey   = Request::input('apikey');
		$cliente  = Request::input('cliente') ?? 110864291 ;
		$response = '';
		$xml = new \SimpleXMLElement('<?xml version="1.0" encoding="utf-8" standalone="yes"?><data/>');
		$busqueda = $xml->addChild('busqueda');
		$busqueda->addChild('cliente',$cliente);
		$busqueda->addChild('cuit',$cuit);
		$data = $xml->addChild('response');
		self::$revisar_monsanto = true;
		$resp = self::obtenerServicioScore($cuit,true,false);
		$data->addChild('html',$nn);
		$data->addChild('rechazo',self::$monsanto);
		$data->addChild('estado',self::estadoRechazado(self::$monsanto));
		return $xml->asXML();
	}

	public static function estadoRechazado($estado) {
		$estado = explode(' ', $estado);
		if($estado[0] == 'Rechazo') {
			return 'R';
		}
		return 'A';
	}

	//-----------------------  SECCION PARA NUEVA API FIDECHECK  -----------------------------------------------//
	//-- Todo el codigo referido al nuevo sistema de consultas para WS se encuentra aca, pasar todo lo que se encuentre dentro de la seccion.  --//

	//-- Funcion encargada de tomar los segundos de vigencia del token que devuelve WS convertirlo en una fecha valida.
	static function fechaVencimientoToken($segundos) {
        date_default_timezone_set('America/Argentina/Buenos_Aires');
        $segundos = (int) $segundos;
        return date('Y-m-d H:i:s', time()+$segundos);
    }

	//-- Funcion para limpiar la fecha devuelta por ws.
	static function limpiarFechaWs($fecha) {
		try {
			$fecha = explode('-',$fecha);
			return $fecha[0].'-'.$fecha[1].'-'.substr($fecha[2],0,2);	
		} catch (\Throwable $th) {
			return '';
		}
		
	}

	//-- Funcion para ordenar fecha formato argentina
	static function formatoArgentina($fecha) {
		try {
			$fecha = explode('-',$fecha);
			return $fecha[2].'/'.$fecha[1].'/'.$fecha[0];
		} catch (\Throwable $th) {
			return '';
		}
	}

	//-- Funcion encargada de solicitar el token valido a la DB, sino lo obtiene pide uno nuevo a WS.
	//-- Esta funcion ya incluye una notificacion en caso de error al loguearse a WS.
	static function pedirToken() {
        try {
            $metodo = env('PEP_NV_SERVICIO');
            $credenciales = SQLConnection::backendStoreProcedure('PEP_obtener_datos_login', array($metodo),'selectOne');
            
            $token = '';
            $expiracion = '';
            
            $user = env('PEP_NV_USERNAME');
            $pass = env('PEP_NV_PASSWORD');

            $data = json_encode(array("userNameOrEmailAddress" => $user, "password" => $pass));

            if(!is_null($credenciales)) {
                return $credenciales->token;
                //return $credenciales;
            } else {
                $curl = curl_init();

                curl_setopt_array($curl, array(
                    CURLOPT_URL => env('PEP_NV_URL_LOGIN'),
                    CURLOPT_RETURNTRANSFER => true,
                    CURLOPT_ENCODING => '',
                    CURLOPT_MAXREDIRS => 10,
                    CURLOPT_TIMEOUT => 0,
                    CURLOPT_FOLLOWLOCATION => true,
                    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                    CURLOPT_CUSTOMREQUEST => 'POST',
                    CURLOPT_POSTFIELDS => $data,
                    CURLOPT_HTTPHEADER => array(
                        'Content-Type: application/json'
                    ),
                ));

                $response = curl_exec($curl);
                curl_close($curl);

                $resp = json_decode($response)->result;
                $token = $resp->accessToken;
                $expiracion = self::fechaVencimientoToken($resp->expireInSeconds);
                SQLConnection::backendStoreProcedure('PEP_guardar_autenticacion', array($token,'',$expiracion,$metodo));

                return $token;
            }
        } catch (\Throwable $th) {
            $mensaje = 'Error al generar token para nuevo servicio de ws Desarrollo. <br> Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
            Misc::enviarMail_errores_api($mensaje);
            return null;
        }

    }

	//-- Funcion encargada de manejar los errores.
	static function erroresWsV2($codigo) {
		$errores = [200 => 'Ok', 
			100 => 'El codigo pais solo permite 2 caracteres. Ej: AR, BR, ES', 
			300 => 'Debe ingresar al menos un tax_id, dni o nombre',
			400 => 'Error de coenxión, intentelo nuevamente.',
			401 => 'Sin resultados para los datos provistos. Intentelo nuevamente.',
			301 => 'Debe ingresar un taxid valido.',
			302 => 'Debe ingresar un dni valido.',
			303 => 'Las busqueda por taxid o dni solo son validad para Argentina'];
		return $errores[$codigo];
	}

	//-- Funcion para determinar fidecheck color
	static function colorFidecheck($tipoFuente, $relacion) {
		$posibleDni = "/[0-9]{7,8}/";
		
		if($tipoFuente == 'PEP' and preg_match($posibleDni, $relacion)) {
			return 'R';
		} else if($tipoFuente == 'PEP' and !preg_match($posibleDni, $relacion)) {
			return 'E';
		} else if($tipoFuente == 'TER' || $tipoFuente == 'SAN') {
			return 'P';
		} else if($tipoFuente == 'SO') {
			return 'S';
		} else {
			return 'N';
		}
	}

	//-- Funcion para determinar el la etiquete segun el color de fidecheck
	static function etiquetaFidecheck($letra) {
		$etiquetas = array('R' => 'RELACIONADO', 'E' => 'PEP', 'P' => 'SANCIONADO', 'S' => 'SUJETO OBLIGADO', 'N' => 'NEGATIVO');
		try {
			return $etiquetas[$letra];
		} catch (\Throwable $th) {
			return 'null';
		}
	}

	//-- Funcion que solo se uso para pruebas, a la fecha 26-07-2022 no esta en uso.
	static function datosVigenciaConsultasWs($cuit) {
		$r = SQLConnection::backendStoreProcedure('LN_Fidecheck_API', array($cuit,env('PEP_NV_TOPE_DIAS')));
		echo(var_dump($r)); die();
	}


	//-- Funcion encargada de guardar el consumo con la siguiente prioridad: cuit, dni o nombre. Retornando el id_consumo
	static function obtenerIdConsumos($idTributaria, $dni, $nombre, $id_producto) {
		//$id_producto = env('PEP_NV_PRODUCTO');
		$idTributaria = self::limpiarCuit($idTributaria);
		$dni = self::limpiarCuit($dni);
		$nombre = (strlen($nombre) > 20) ? substr($nombre,0,19) : $nombre;

		if($idTributaria != '') {
			return self::consumir_servicio($idTributaria,$id_producto)->transaction_id;
		} else if($dni != '') {
			return self::consumir_servicio($dni,$id_producto)->transaction_id;
		} else {
			return self::consumir_servicio($nombre,$id_producto)->transaction_id;
		}
	}

	//-- Funcion para el manejo de respuestas segun el producto y url 
	static function manejadoRespuesta($lista, $nroProducto) {
		if($nroProducto != env('PEP_NV_PRODUCTO')) {
			//return array('cambio formato');
			$nuevaLista = array();
			foreach ($lista as $key) {
				$pn = new \stdClass;
				$pn->error = $key->Status;
				$pn->taxid = $key->cuit;
				$pn->nombre = $key->nombre_persona;
				$pn->fidecheck = self::etiquetaFidecheck($key->fidecheck);
				$pn->DescripcionFuente = $key->DescripcionFuente;
				$pn->lista = $key->TipoFuente;
				$pn->pais = $key->DescripcionPais;
				$pn->cargo = $key->Cargo;
				$pn->institucion = $key->Institucion;
				$pn->relacion = $key->Relacion;
				$nuevaLista[] = $pn;
			}
			return $nuevaLista;
		}
		return $lista;
	}

	//-- Funcion principal (api) encargada de generar la consulta a ws
    static function consultaWs_anterior() {
		//echo(var_dump(SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_select', array('20132146234'),'select'))); die();
		//-- Datos del usuario en session.
		$usuario        = Session::get('usuario');
			
		//-- Lista que contendra los datos finales.
		$lista = array();

		//-- Variable para el codigo de status
		$codigo = '';

		//-- Variables recibidas.
		$idTributaria = trim(isset($_POST['tax_id']) ? $_POST['tax_id'] : (isset($_POST['TAX_ID']) ? $_POST['TAX_ID'] : ''));
		//$dni = trim(isset($_POST['dni']) ? $_POST['dni'] : (isset($_POST['DNI']) ? $_POST['DNI'] : ''));
		$dni = $idTributaria;
		$nombre = trim(isset($_POST['full_name']) ? $_POST['full_name'] : (isset($_POST['FULL_NAME']) ? $_POST['FULL_NAME'] : ''));
		$nombre = self::nombre_formateo($nombre);
		$pais = strtoupper(trim(isset($_POST['country_code']) ? $_POST['country_code'] : (isset($_POST['COUNTRY_CODE']) ? $_POST['COUNTRY_CODE'] : '')));

		//--  PARAMETROS AGREGADOS PARA CONTRAPARTE Y GESTION  --//
		$nroContraparte = strtoupper(trim(isset($_POST['contraparte']) ? $_POST['contraparte'] : (isset($_POST['CONTRAPARTE']) ? $_POST['CONTRAPARTE'] : '')));
		$nroGestion = strtoupper(trim(isset($_POST['gestion']) ? $_POST['gestion'] : (isset($_POST['GESTION']) ? $_POST['GESTION'] : '')));
		$nroContraparte = $nroContraparte == '' ? null : $nroContraparte;
		$nroGestion = $nroGestion == '' ? null : $nroGestion; 
		//-------------------------------------------------------//
		
		$nroProducto = $usuario->producto;
		$id_consumo = self::obtenerIdConsumos($idTributaria, $dni, $nombre, $nroProducto);
		$paraBusqueda = $idTributaria;
		$ruta = $_SERVER['REQUEST_URI'];
		

		try {
			
			//-- Seccion para validaciones varias.
			if(!self::tax_id_valido($idTributaria)) {
				$idTributaria = '';
			}

			if(strlen($pais) > 2) {
				$codigo = 100;
			} else if($idTributaria == '' and $dni == '' and $nombre == '') {
				$codigo = 300;
			} else if($idTributaria != '' and !self::tax_id_valido($idTributaria) and $dni == '' and $nombre == '') {
				$codigo = 301;
			} else if($idTributaria == '' and $dni != '' and !self::dni_valido($dni) and $nombre == '') {
				$codigo = 302;
			} else if($idTributaria != '' and self::tax_id_valido($idTributaria) and $dni == '' and $nombre == '' and $pais != 'AR') {
				$codigo = 303;
			} else if($idTributaria == '' and $dni != '' and self::dni_valido($dni) and $nombre == '' and $pais != 'AR') {
				$codigo = 303;
			}

			if($codigo != '') {
				return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			}

			//-- Seccion donde se deberia componer el dni en cuit
			//-- ESTO VER QUE SUCEDE CUANDO NO EXISTE EL CUIT  --//
			if($dni != '' and $idTributaria == '') {
				$idTributaria = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select')[0]->identificacion;
				$paraBusqueda = $idTributaria;
			}
			
			if($paraBusqueda == '' and $nombre != '') {
				$paraBusqueda = $nombre;
			}
			//echo($paraBusqueda.' - '.env('PEP_NV_TOPE_DIAS')); die();
			//--  Seccion donde se verifica si el pedido ya fue consultado dentro de los N dias a WS. Sino va a WS.
			$r = SQLConnection::backendStoreProcedure('LN_Fidecheck_API', array($paraBusqueda,env('PEP_NV_TOPE_DIAS')));
			//echo(var_dump($r)); die();
			//$r = array();
			if(count($r) > 0 and !isset($_POST['debug'])) {
				foreach ($r as $key) {
					$persona = new \stdClass;
					//$persona->id_resultado = $key->id_resultado;  //-> ese es al antiguo id, era solo de uso interno en la vieja estructura.
					$persona->cuit = $key->cuit;
					$persona->nombre_persona = $key->nombre_persona;
					//$persona->id_padron = $key->id_padron; //-> Esto se comenta dado que la estructura anterio siempre lo ponia en 0.
					$persona->StatusCode = $key->StatusCode;
					$persona->Status = $key->Status;
					$persona->Reason = $key->Reason;
					$persona->Id = $key->Id;
					$persona->Fuente = $key->Fuente;
					$persona->NombreModificado = $key->NombreModificado;
					$persona->DocumentoBuscado = $key->DocumentoBuscado;
					$persona->NombreBuscado = $key->NombreBuscado;
					$persona->Documento = $key->Documento;
					$persona->Residencia = $key->Residencia;
					$persona->DescripcionPais = $key->DescripcionPais;
					//$persona->PaisNoColaborativo = $key->PaisNoColaborativo; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					//$persona->Hallazgos = $key->Hallazgos; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					//$persona->ExisteDocumentacion = $key->ExisteDocumentacion; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					$persona->PorcentajeSimilitud = $key->PorcentajeSimilitud;
					$persona->fidecheck = $key->fidecheck;
					$persona->Codigo = $key->Codigo;
					$persona->FechaNovedad = $key->FechaNovedad;
					$persona->FechaNovedaddmy = $key->FechaNovedaddmy;
					$persona->Cargo = $key->Cargo;
					$persona->Institucion = $key->Institucion;
					$persona->Domicilio = $key->Domicilio;
					$persona->NumeroDocumento = $key->NumeroDocumento;
					$persona->NumeroIdTributaria = $key->NumeroIdTributaria;
					$persona->Url = $key->Url;
					$persona->Relacion = $key->Relacion;
					$persona->orden = $key->orden;
					$persona->TipoFuente = $key->TipoFuente;
					$persona->DescripcionFuente = $key->PrincipalLista;
					//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
					$persona->fecha = $key->fecha;
					$persona->visible = $key->visible;
					$lista[] = $persona;
				}
				$lista = self::manejadoRespuesta($lista, $nroProducto);
				$codigo = 200;
				return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			
			} else {
				//echo("debe ir a WS."); die();
				//--  SECCION PARA LA VALIDACION DEL TOKEN EN CASO QUE DEBA IR A WS.  --//

				//-- Se pide el token a la DB, sino se encuentra vigente se solicita uno nuevo. Esta funcion ya informa en caso de no poder obtenerlo.
				$token = self::pedirToken();

				if(!isset($token) || is_null($token)) {
					$codigo = 400;
				}

				if($codigo != '') {
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				}

				//---------------------------------------------------------------------//

				//-- Variables de entorno.
				$identificacion = env('PEP_NV_IDENTIFICACION');
				$confBusqueda = env('PEP_NV_BUSQUEDA');

				//-- Armado de datos para la consulta a WS.
				$data = json_encode(array("Identification" => $identificacion, "Nombre" => $nombre, "Documento" => $dni, "IdTributaria" => $idTributaria, "ConfigurationName" => $confBusqueda));

				//-- inicio del cURL. ---------------------------------------------------------------------//

				$curl = curl_init();

				curl_setopt_array($curl, array(
					CURLOPT_URL => env('PEP_NV_URL_CONSULTA'),
					CURLOPT_RETURNTRANSFER => true,
					CURLOPT_ENCODING => '',
					CURLOPT_MAXREDIRS => 10,
					CURLOPT_TIMEOUT => 0,
					CURLOPT_FOLLOWLOCATION => true,
					CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
					CURLOPT_CUSTOMREQUEST => 'POST',
					CURLOPT_POSTFIELDS => $data,
					CURLOPT_HTTPHEADER => array(
						'Authorization: Bearer '.$token,
						'Content-Type: application/json'
					),
				));

				$response = curl_exec($curl);
				curl_close($curl);
				//-- Fin del cURL. -------------------------------------------------------------------------//

				//-- Se convierte a json la respuesta doda que viene como un String.
				$response = json_decode($response, true)['hits'];

				//-- > SECCION PARA DEBUG, MUESTRA EL DATO EN CRUDO DE WS.  --//
				if(isset($_POST['debug']) and $_POST['debug'] == 1) {
					echo(json_encode($response));  	
				}
				//------------------------------------------------------------//

				if($pais == 'AR' and self::tax_id_valido($idTributaria) and $nombre != '') {
					//-- BUsqueda por cuit/cuil
					foreach ($response as $key) {
						
						if(($pais == $key['residencia'] and $key['idTributaria'] == $idTributaria) || ($pais == $key['residencia'] and $key['idTributaria'] == '' and Misc::esElMismoNombreWs($nombre, $key['nombre']) and $key['fuente']['kind']['code'] == 'SAN')) {	
							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				} else if($pais == 'AR' and self::tax_id_valido($idTributaria) and $nombre == '') {
					//-- BUsqueda por cuit/cuil
					foreach ($response as $key) {
						if($pais == $key['residencia'] and $key['idTributaria'] == $idTributaria) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $persona->DescripcionFuente$principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				} else if($pais != '' and strlen($nombre) > 2) {
					//-- Busqueda por pais y nombre
					foreach ($response as $key) {
						if($pais == $key['residencia'] and Misc::esElMismoNombreWs($nombre, $key['nombre'])) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							///-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				} else {
					//-- Busqueda libre por nombre
					foreach ($response as $key) {
						if(Misc::esElMismoNombreWs($nombre, $key['nombre'])) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				}
				//-- EVALUAR SI ESTE if SIGUE SIENDO NECESARIO  --//
				if(count($lista) == 0) {
					$datosParaGuardar = array();
					$persona = new \stdClass;

					//-- Esta variables son tipo swap, no tocar  --//
					$persona->tipoFuente = '';
					$persona->relacion = '';
					$persona->FechaNovedad = '';
					//---------------------------------------------//

					//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
					$persona->cuit = ''; //-> ok
					$datosParaGuardar[0] = $persona->cuit; 
					$persona->nombre_persona = ''; //-> ok
					$datosParaGuardar[1] = $persona->nombre_persona;
					$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
					$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
					$persona->StatusCode = '200'; //-> ok
					$datosParaGuardar[4] = $persona->StatusCode;
					$persona->Status = 'OK'; //-> ok
					$datosParaGuardar[5] = $persona->Status;
					$persona->Reason = ''; //-> ok
					$datosParaGuardar[6] = $persona->Reason;
					$persona->Id = ''; //-> ok
					$datosParaGuardar[7] = $persona->Id;
					$persona->Fuente = ''; //-> ok
					$datosParaGuardar[8] = $persona->Fuente;
					$persona->NombreModificado = ''; //-> ok
					$datosParaGuardar[9] = $persona->NombreModificado;
					$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
					$datosParaGuardar[10] = $persona->DocumentoBuscado;
					$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
					$datosParaGuardar[11] = $persona->NombreBuscado;
					$persona->Documento = ''; //-> ok
					$datosParaGuardar[12] = $persona->Documento;
					$persona->Residencia = ''; //-> ok
					$datosParaGuardar[14] = $persona->Residencia;
					$persona->DescripcionPais = ''; //-> ok
					$datosParaGuardar[15] = $persona->DescripcionPais;
					$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
					$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
					$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
					$persona->PorcentajeSimilitud = ''; //-> ok
					$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
					$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
					$datosParaGuardar[20] = $persona->fidecheck;
					$persona->Codigo = ''; //-> ok
					$datosParaGuardar[21] = $persona->Codigo;
					$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
					$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
					$datosParaGuardar[23] = $persona->FechaNovedad;
					$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
					$persona->Cargo = ''; //-> ok
					$datosParaGuardar[24] = $persona->Cargo;
					$persona->Institucion = ''; //-> ok
					$datosParaGuardar[25] = $persona->Institucion;
					$persona->Domicilio = ''; //-> ok
					$datosParaGuardar[26] = $persona->Domicilio;
					$persona->NumeroDocumento = ''; //-> ok
					$datosParaGuardar[27] = $persona->NumeroDocumento;
					$persona->NumeroIdTributaria = $persona->cuit; //-> ok
					$datosParaGuardar[28] = $persona->NumeroIdTributaria;
					$persona->Url = ''; //-> ok
					$datosParaGuardar[29] = $persona->Url;
					$persona->Relacion = $persona->relacion; //->ok
					$datosParaGuardar[30] = $persona->Relacion;
					$persona->orden = ''; //-> ver esto para que se esta usando.
					$persona->TipoFuente = $persona->tipoFuente; //-> ok
					$datosParaGuardar[13] = $persona->TipoFuente;
					//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
					$persona->DescripcionFuente = ''; 
					//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
					$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
					$persona->visible = '1'; //-> se e coloca 1 por default.
					
					$principalLista = ''; //-> ok
					$datosParaGuardar[31] = $principalLista;
					//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
					//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
					//---- $datosParaGuardar[32] = $principalListaDescripcion;
					$datosParaGuardar[32] = $persona->DescripcionFuente;
					$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[33] = $paisSwift;
					$tipoNovedad = '';
					$datosParaGuardar[34] = $tipoNovedad;
					$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[35] = $idOrigRel;
					$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[36] = $principalFuente;
					$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[37] = $observaciones;
					$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
					$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[39] = $urlNew;
					$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[40] = $normaUif;
					$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[41] = $normaUifDescripcion;
					$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[42] = $fuenteLista;
					$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[43] = $fuenteActiva;
					//--> $fuenteDescripcion = $persona->PrincipalLista;
					$fuenteDescripcion = $principalLista;
					$datosParaGuardar[44] = $fuenteDescripcion;
					$fuenteDescripcionLarga = $persona->DescripcionFuente;
					$datosParaGuardar[45] = $fuenteDescripcionLarga;
					$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[46] = $fuenteTipo;
					$fuenteImagen = '';
					$datosParaGuardar[47] = $fuenteImagen;
					$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[48] = $fuenteActualizaxml;
					$lista[] = $persona;
					//echo("aca tarda"); die();
					//$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
					$codigo = 200;
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				}
				// $codigo = 200;
				// $lista = self::manejadoRespuesta($lista, $nroProducto);
				// return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			}
		} catch (\Throwable $th) {
			$mensaje = 'Error al consultar nueva api ws desarrollo. <br> Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
            Misc::enviarMail_errores_api($mensaje);
			$codigo = 401;
			return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'PAIS' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
		}
		
    }


 	static function consultaWs() {
		//echo(var_dump(SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_select', array('20132146234'),'select'))); die();
		//-- Datos del usuario en session.
		$usuario        = Session::get('usuario');
			
		//-- Lista que contendra los datos finales.
		$lista = array();

		//-- Variable para el codigo de status
		$codigo = '';

		//-- Variables recibidas.
		$idTributaria = trim(isset($_POST['tax_id']) ? $_POST['tax_id'] : (isset($_POST['TAX_ID']) ? $_POST['TAX_ID'] : ''));
		//$dni = trim(isset($_POST['dni']) ? $_POST['dni'] : (isset($_POST['DNI']) ? $_POST['DNI'] : ''));
		$dni = $idTributaria;
		$nombre = trim(isset($_POST['full_name']) ? $_POST['full_name'] : (isset($_POST['FULL_NAME']) ? $_POST['FULL_NAME'] : ''));
		$nombre = self::nombre_formateo($nombre);
		$pais = strtoupper(trim(isset($_POST['country_code']) ? $_POST['country_code'] : (isset($_POST['COUNTRY_CODE']) ? $_POST['COUNTRY_CODE'] : '')));

		//--  PARAMETROS AGREGADOS PARA CONTRAPARTE Y GESTION  --//
		$nroContraparte = strtoupper(trim(isset($_POST['contraparte']) ? $_POST['contraparte'] : (isset($_POST['CONTRAPARTE']) ? $_POST['CONTRAPARTE'] : '')));
		$nroGestion = strtoupper(trim(isset($_POST['gestion']) ? $_POST['gestion'] : (isset($_POST['GESTION']) ? $_POST['GESTION'] : '')));
		$nroContraparte = $nroContraparte == '' ? null : $nroContraparte;
		$nroGestion = $nroGestion == '' ? null : $nroGestion; 
		//-------------------------------------------------------//
		
		$nroProducto = $usuario->producto;
		$id_consumo = self::obtenerIdConsumos($idTributaria, $dni, $nombre, $nroProducto);
		$paraBusqueda = $idTributaria;
		$ruta = $_SERVER['REQUEST_URI'];
		

		try {
			
			//-- Seccion para validaciones varias.
			if($pais == 'AR' && !self::tax_id_valido($idTributaria)) {
				$idTributaria = '';
			}

			if(strlen($pais) > 2) {
				$codigo = 100;
			} else if($idTributaria == '' and $dni == '' and $nombre == '') {
				$codigo = 300;
			} else if($idTributaria != '' and !self::tax_id_valido($idTributaria) and $dni == '' and $nombre == '') {
				$codigo = 301;
			} else if($idTributaria == '' and $dni != '' and !self::dni_valido($dni) and $nombre == '') {
				$codigo = 302;
			} else if($idTributaria != '' and self::tax_id_valido($idTributaria) and $dni == '' and $nombre == '' and $pais != 'AR') {
				$codigo = 303;
			} else if($idTributaria == '' and $dni != '' and self::dni_valido($dni) and $nombre == '' and $pais != 'AR') {
				$codigo = 303;
			}

			if($codigo != '') {
				return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			}

			//-- Seccion donde se deberia componer el dni en cuit
			//-- ESTO VER QUE SUCEDE CUANDO NO EXISTE EL CUIT  --//
			if($dni !== '' and $idTributaria == '') {
				$idTributaria = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select')[0]->identificacion;
				$paraBusqueda = $idTributaria;
			}
			
			if($paraBusqueda == '' and $nombre !== '') {
				$paraBusqueda = $nombre;
			}
			//echo($paraBusqueda.' - '.env('PEP_NV_TOPE_DIAS')); die();
			//--  Seccion donde se verifica si el pedido ya fue consultado dentro de los N dias a WS. Sino va a WS.
			$r = SQLConnection::backendStoreProcedure('LN_Fidecheck_API', array($paraBusqueda,env('PEP_NV_TOPE_DIAS')));
			//echo(var_dump($r)); die();
			//$r = array();
			if(count($r) > 0 and !isset($_POST['debug'])) {
				foreach ($r as $key) {
					$persona = new \stdClass;
					//$persona->id_resultado = $key->id_resultado;  //-> ese es al antiguo id, era solo de uso interno en la vieja estructura.
					$persona->cuit = $key->cuit;
					$persona->nombre_persona = $key->nombre_persona;
					//$persona->id_padron = $key->id_padron; //-> Esto se comenta dado que la estructura anterio siempre lo ponia en 0.
					$persona->StatusCode = $key->StatusCode;
					$persona->Status = $key->Status;
					$persona->Reason = $key->Reason;
					$persona->Id = $key->Id;
					$persona->Fuente = $key->Fuente;
					$persona->NombreModificado = $key->NombreModificado;
					$persona->DocumentoBuscado = $key->DocumentoBuscado;
					$persona->NombreBuscado = $key->NombreBuscado;
					$persona->Documento = $key->Documento;
					$persona->Residencia = $key->Residencia;
					$persona->DescripcionPais = $key->DescripcionPais;
					//$persona->PaisNoColaborativo = $key->PaisNoColaborativo; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					//$persona->Hallazgos = $key->Hallazgos; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					//$persona->ExisteDocumentacion = $key->ExisteDocumentacion; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					$persona->PorcentajeSimilitud = $key->PorcentajeSimilitud;
					$persona->fidecheck = $key->fidecheck;
					$persona->Codigo = $key->Codigo;
					$persona->FechaNovedad = $key->FechaNovedad;
					$persona->FechaNovedaddmy = $key->FechaNovedaddmy;
					$persona->Cargo = $key->Cargo;
					$persona->Institucion = $key->Institucion;
					$persona->Domicilio = $key->Domicilio;
					$persona->NumeroDocumento = $key->NumeroDocumento;
					$persona->NumeroIdTributaria = $key->NumeroIdTributaria;
					$persona->Url = $key->Url;
					$persona->Relacion = $key->Relacion;
					$persona->orden = $key->orden;
					$persona->TipoFuente = $key->TipoFuente;
					$persona->DescripcionFuente = $key->PrincipalLista;
					//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
					$persona->fecha = $key->fecha;
					$persona->visible = $key->visible;
					$lista[] = $persona;
				}
				$lista = self::manejadoRespuesta($lista, $nroProducto);
				$codigo = 200;
				return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			
			} else {
				
				//echo("debe ir a WS."); die();
				//--  SECCION PARA LA VALIDACION DEL TOKEN EN CASO QUE DEBA IR A WS.  --//

				//-- Se pide el token a la DB, sino se encuentra vigente se solicita uno nuevo. Esta funcion ya informa en caso de no poder obtenerlo.
				$token = self::pedirToken();

				if(!isset($token) || is_null($token)) {
					$codigo = 400;
				}

				if($codigo != '') {
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				}

				//---------------------------------------------------------------------//

				//-- Variables de entorno.
				$identificacion = env('PEP_NV_IDENTIFICACION');
				$confBusqueda = env('PEP_NV_BUSQUEDA');



				//-- Armado de datos para la consulta a WS.
				$data = json_encode(array("Identification" => $identificacion, "Nombre" => $nombre, "Documento" => $dni, "IdTributaria" => $idTributaria, "ConfigurationName" => $confBusqueda));
				/* 03/11/2022: Si es de argentina no manda el nombre en la consulta, para que solo busque el CUIT exacto */
				
				if($pais == 'AR')
				{
					$data = json_encode(array("Identification" => $identificacion, "Nombre" => '', "Documento" => $dni, "IdTributaria" => $idTributaria, "ConfigurationName" => $confBusqueda));
				}
				else 
				{
					$data = json_encode(array("Identification" => $identificacion, "Nombre" => $nombre, "Documento" => $dni, "IdTributaria" => $idTributaria, "ConfigurationName" => $confBusqueda));
				}
				
				/*if(isset($_POST['debug']) and $_POST['debug'] == 1) {
					echo('linea 8302');	
					echo($data); 
					echo("\n\n\n"); 
				
				} */

				//-- inicio del cURL. ---------------------------------------------------------------------//
				$curl = curl_init();

				curl_setopt_array($curl, array(
					CURLOPT_URL => env('PEP_NV_URL_CONSULTA'),
					CURLOPT_RETURNTRANSFER => true,
					CURLOPT_ENCODING => '',
					CURLOPT_MAXREDIRS => 10,
					CURLOPT_TIMEOUT => 0,
					CURLOPT_FOLLOWLOCATION => true,
					CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
					CURLOPT_CUSTOMREQUEST => 'POST',
					CURLOPT_POSTFIELDS => $data,
					CURLOPT_HTTPHEADER => array(
						'Authorization: Bearer '.$token,
						'Content-Type: application/json'
					),
				));

				$response = curl_exec($curl);
				curl_close($curl);
				
				/* 03/11/2022: Guardo Consulta ws */
				$cons = SQLConnection::backendStoreProcedure('Consultas_worldsys_', array($idTributaria, $nombre, $pais, $response), 'selectOne');
				/**/
				//-- Fin del cURL. -------------------------------------------------------------------------//

				//-- Se convierte a json la respuesta doda que viene como un String.

				//-- > SECCION PARA DEBUG, MUESTRA EL DATO EN CRUDO DE WS.  --//
				if(isset($_POST['debug']) and $_POST['debug'] == 1) {
					echo('linea 8318');	
					echo("\nPais: " . $pais);  	
					echo("\nidTributaria: " . $idTributaria);  	
					echo("\nTax_id_valido: " . self::tax_id_valido($idTributaria));  	
					echo("\nnombre: " . $nombre); 
					echo("\nresponse: " . ($response));  	
					echo("\n\n\n"); 
				
				}

				$response = json_decode($response, true)['hits'];				
				//------------------------------------------------------------//

				if($pais == 'AR' and self::tax_id_valido($idTributaria) and $nombre !== '') {

					//-- BUsqueda por cuit/cuil
					foreach ($response as $key) {
						
						if(($pais == $key['residencia'] and $key['idTributaria'] == $idTributaria) || ($pais == $key['residencia'] and $key['idTributaria'] == '' and Misc::esElMismoNombreWs($nombre, $key['nombre']) and $key['fuente']['kind']['code'] == 'SAN')) {	

							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				} else if($pais == 'AR' and self::tax_id_valido($idTributaria) and $nombre == '') {
					//-- BUsqueda por cuit/cuil




					foreach ($response as $key) {
						if($pais == $key['residencia'] and $key['idTributaria'] == $idTributaria) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $persona->DescripcionFuente$principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);

					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				} else if($pais !== '' and strlen($nombre) > 2) {
					//-- Busqueda por pais y nombre
					foreach ($response as $key) {
						if($pais == $key['residencia'] and Misc::esElMismoNombreWs($nombre, $key['nombre'])) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							///-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);


					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				} else {
					//-- Busqueda libre por nombre


					foreach ($response as $key) {
						if(Misc::esElMismoNombreWs($nombre, $key['nombre'])) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);


					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				}
				//-- EVALUAR SI ESTE if SIGUE SIENDO NECESARIO  --//
				if(count($lista) == 0) {
					$datosParaGuardar = array();
					$persona = new \stdClass;

					//-- Esta variables son tipo swap, no tocar  --//
					$persona->tipoFuente = '';
					$persona->relacion = '';
					$persona->FechaNovedad = '';
					//---------------------------------------------//

					//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
					$persona->cuit = ''; //-> ok
					$datosParaGuardar[0] = $persona->cuit; 
					$persona->nombre_persona = ''; //-> ok
					$datosParaGuardar[1] = $persona->nombre_persona;
					$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
					$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
					$persona->StatusCode = '200'; //-> ok
					$datosParaGuardar[4] = $persona->StatusCode;
					$persona->Status = 'OK'; //-> ok
					$datosParaGuardar[5] = $persona->Status;
					$persona->Reason = ''; //-> ok
					$datosParaGuardar[6] = $persona->Reason;
					$persona->Id = ''; //-> ok
					$datosParaGuardar[7] = $persona->Id;
					$persona->Fuente = ''; //-> ok
					$datosParaGuardar[8] = $persona->Fuente;
					$persona->NombreModificado = ''; //-> ok
					$datosParaGuardar[9] = $persona->NombreModificado;
					$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
					$datosParaGuardar[10] = $persona->DocumentoBuscado;
					$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
					$datosParaGuardar[11] = $persona->NombreBuscado;
					$persona->Documento = ''; //-> ok
					$datosParaGuardar[12] = $persona->Documento;
					$persona->Residencia = ''; //-> ok
					$datosParaGuardar[14] = $persona->Residencia;
					$persona->DescripcionPais = ''; //-> ok
					$datosParaGuardar[15] = $persona->DescripcionPais;
					$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
					$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
					$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
					$persona->PorcentajeSimilitud = ''; //-> ok
					$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
					$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
					$datosParaGuardar[20] = $persona->fidecheck;
					$persona->Codigo = ''; //-> ok
					$datosParaGuardar[21] = $persona->Codigo;
					$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
					$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
					$datosParaGuardar[23] = $persona->FechaNovedad;
					$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
					$persona->Cargo = ''; //-> ok
					$datosParaGuardar[24] = $persona->Cargo;
					$persona->Institucion = ''; //-> ok
					$datosParaGuardar[25] = $persona->Institucion;
					$persona->Domicilio = ''; //-> ok
					$datosParaGuardar[26] = $persona->Domicilio;
					$persona->NumeroDocumento = ''; //-> ok
					$datosParaGuardar[27] = $persona->NumeroDocumento;
					$persona->NumeroIdTributaria = $persona->cuit; //-> ok
					$datosParaGuardar[28] = $persona->NumeroIdTributaria;
					$persona->Url = ''; //-> ok
					$datosParaGuardar[29] = $persona->Url;
					$persona->Relacion = $persona->relacion; //->ok
					$datosParaGuardar[30] = $persona->Relacion;
					$persona->orden = ''; //-> ver esto para que se esta usando.
					$persona->TipoFuente = $persona->tipoFuente; //-> ok
					$datosParaGuardar[13] = $persona->TipoFuente;
					//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
					$persona->DescripcionFuente = ''; 
					//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
					$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
					$persona->visible = '1'; //-> se e coloca 1 por default.
					
					$principalLista = ''; //-> ok
					$datosParaGuardar[31] = $principalLista;
					//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
					//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
					//---- $datosParaGuardar[32] = $principalListaDescripcion;
					$datosParaGuardar[32] = $persona->DescripcionFuente;
					$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[33] = $paisSwift;
					$tipoNovedad = '';
					$datosParaGuardar[34] = $tipoNovedad;
					$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[35] = $idOrigRel;
					$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[36] = $principalFuente;
					$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[37] = $observaciones;
					$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
					$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[39] = $urlNew;
					$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[40] = $normaUif;
					$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[41] = $normaUifDescripcion;
					$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[42] = $fuenteLista;
					$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[43] = $fuenteActiva;
					//--> $fuenteDescripcion = $persona->PrincipalLista;
					$fuenteDescripcion = $principalLista;
					$datosParaGuardar[44] = $fuenteDescripcion;
					$fuenteDescripcionLarga = $persona->DescripcionFuente;
					$datosParaGuardar[45] = $fuenteDescripcionLarga;
					$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[46] = $fuenteTipo;
					$fuenteImagen = '';
					$datosParaGuardar[47] = $fuenteImagen;
					$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[48] = $fuenteActualizaxml;
					$lista[] = $persona;
					//echo("aca tarda"); die();
					//$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
					$codigo = 200;
					$lista = self::manejadoRespuesta($lista, $nroProducto);


					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				}
				// $codigo = 200;
				// $lista = self::manejadoRespuesta($lista, $nroProducto);
				// return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			}
		} catch (\Throwable $th) {
			$mensaje = 'Error al consultar nueva api ws desarrollo. <br> Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
            Misc::enviarMail_errores_api($mensaje);
			$codigo = 401;
			//
			return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'PAIS' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
		}
		
    }



     static function consultaWs_Oct2022() {
		//echo(var_dump(SQLConnection::backendStoreProcedure('LN_Fidecheck_ws_select', array('20132146234'),'select'))); die();
		//-- Datos del usuario en session.
		$usuario        = Session::get('usuario');
			
		//-- Lista que contendra los datos finales.
		$lista = array();

		//-- Variable para el codigo de status
		$codigo = '';

		//-- Variables recibidas.
		$idTributaria = trim(isset($_POST['tax_id']) ? $_POST['tax_id'] : (isset($_POST['TAX_ID']) ? $_POST['TAX_ID'] : ''));
		//$dni = trim(isset($_POST['dni']) ? $_POST['dni'] : (isset($_POST['DNI']) ? $_POST['DNI'] : ''));
		$dni = $idTributaria;
		$nombre = trim(isset($_POST['full_name']) ? $_POST['full_name'] : (isset($_POST['FULL_NAME']) ? $_POST['FULL_NAME'] : ''));
		$nombre = self::nombre_formateo($nombre);
		$pais = strtoupper(trim(isset($_POST['country_code']) ? $_POST['country_code'] : (isset($_POST['COUNTRY_CODE']) ? $_POST['COUNTRY_CODE'] : '')));

		//--  PARAMETROS AGREGADOS PARA CONTRAPARTE Y GESTION  --//
		$nroContraparte = strtoupper(trim(isset($_POST['contraparte']) ? $_POST['contraparte'] : (isset($_POST['CONTRAPARTE']) ? $_POST['CONTRAPARTE'] : '')));
		$nroGestion = strtoupper(trim(isset($_POST['gestion']) ? $_POST['gestion'] : (isset($_POST['GESTION']) ? $_POST['GESTION'] : '')));
		$nroContraparte = $nroContraparte == '' ? null : $nroContraparte;
		$nroGestion = $nroGestion == '' ? null : $nroGestion; 
		//-------------------------------------------------------//
		
		$nroProducto = $usuario->producto;
		$id_consumo = self::obtenerIdConsumos($idTributaria, $dni, $nombre, $nroProducto);
		$paraBusqueda = $idTributaria;
		$ruta = $_SERVER['REQUEST_URI'];
		

		try {
			
			//-- Seccion para validaciones varias.
			if(!self::tax_id_valido($idTributaria)) {
				$idTributaria = '';
			}

			if(strlen($pais) > 2) {
				$codigo = 100;
			} else if($idTributaria == '' and $dni == '' and $nombre == '') {
				$codigo = 300;
			} else if($idTributaria != '' and !self::tax_id_valido($idTributaria) and $dni == '' and $nombre == '') {
				$codigo = 301;
			} else if($idTributaria == '' and $dni != '' and !self::dni_valido($dni) and $nombre == '') {
				$codigo = 302;
			} else if($idTributaria != '' and self::tax_id_valido($idTributaria) and $dni == '' and $nombre == '' and $pais != 'AR') {
				$codigo = 303;
			} else if($idTributaria == '' and $dni != '' and self::dni_valido($dni) and $nombre == '' and $pais != 'AR') {
				$codigo = 303;
			}

			if($codigo != '') {
				return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			}

			//-- Seccion donde se deberia componer el dni en cuit
			//-- ESTO VER QUE SUCEDE CUANDO NO EXISTE EL CUIT  --//
			if($dni !== '' and $idTributaria == '') {
				$idTributaria = SQLConnection::backendStoreProcedure('api_get_govcheck',array($dni),'select')[0]->identificacion;
				$paraBusqueda = $idTributaria;
			}
			
			if($paraBusqueda == '' and $nombre !== '') {
				$paraBusqueda = $nombre;
			}
			//echo($paraBusqueda.' - '.env('PEP_NV_TOPE_DIAS')); die();
			//--  Seccion donde se verifica si el pedido ya fue consultado dentro de los N dias a WS. Sino va a WS.
			$r = SQLConnection::backendStoreProcedure('LN_Fidecheck_API', array($paraBusqueda,env('PEP_NV_TOPE_DIAS')));
			//echo(var_dump($r)); die();
			//$r = array();
			if(count($r) > 0 and !isset($_POST['debug'])) {
				foreach ($r as $key) {
					$persona = new \stdClass;
					//$persona->id_resultado = $key->id_resultado;  //-> ese es al antiguo id, era solo de uso interno en la vieja estructura.
					$persona->cuit = $key->cuit;
					$persona->nombre_persona = $key->nombre_persona;
					//$persona->id_padron = $key->id_padron; //-> Esto se comenta dado que la estructura anterio siempre lo ponia en 0.
					$persona->StatusCode = $key->StatusCode;
					$persona->Status = $key->Status;
					$persona->Reason = $key->Reason;
					$persona->Id = $key->Id;
					$persona->Fuente = $key->Fuente;
					$persona->NombreModificado = $key->NombreModificado;
					$persona->DocumentoBuscado = $key->DocumentoBuscado;
					$persona->NombreBuscado = $key->NombreBuscado;
					$persona->Documento = $key->Documento;
					$persona->Residencia = $key->Residencia;
					$persona->DescripcionPais = $key->DescripcionPais;
					//$persona->PaisNoColaborativo = $key->PaisNoColaborativo; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					//$persona->Hallazgos = $key->Hallazgos; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					//$persona->ExisteDocumentacion = $key->ExisteDocumentacion; //-> se comenta dado que en la nueva estructura de ws no esta incluido.
					$persona->PorcentajeSimilitud = $key->PorcentajeSimilitud;
					$persona->fidecheck = $key->fidecheck;
					$persona->Codigo = $key->Codigo;
					$persona->FechaNovedad = $key->FechaNovedad;
					$persona->FechaNovedaddmy = $key->FechaNovedaddmy;
					$persona->Cargo = $key->Cargo;
					$persona->Institucion = $key->Institucion;
					$persona->Domicilio = $key->Domicilio;
					$persona->NumeroDocumento = $key->NumeroDocumento;
					$persona->NumeroIdTributaria = $key->NumeroIdTributaria;
					$persona->Url = $key->Url;
					$persona->Relacion = $key->Relacion;
					$persona->orden = $key->orden;
					$persona->TipoFuente = $key->TipoFuente;
					$persona->DescripcionFuente = $key->PrincipalLista;
					//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
					$persona->fecha = $key->fecha;
					$persona->visible = $key->visible;
					$lista[] = $persona;
				}
				$lista = self::manejadoRespuesta($lista, $nroProducto);
				$codigo = 200;
				return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			
			} else {
				//echo("debe ir a WS."); die();
				//--  SECCION PARA LA VALIDACION DEL TOKEN EN CASO QUE DEBA IR A WS.  --//

				//-- Se pide el token a la DB, sino se encuentra vigente se solicita uno nuevo. Esta funcion ya informa en caso de no poder obtenerlo.
				$token = self::pedirToken();

				if(!isset($token) || is_null($token)) {
					$codigo = 400;
				}

				if($codigo != '') {
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				}

				//---------------------------------------------------------------------//

				//-- Variables de entorno.
				$identificacion = env('PEP_NV_IDENTIFICACION');
				$confBusqueda = env('PEP_NV_BUSQUEDA');



				//-- Armado de datos para la consulta a WS.
				$data = json_encode(array("Identification" => $identificacion, "Nombre" => $nombre, "Documento" => $dni, "IdTributaria" => $idTributaria, "ConfigurationName" => $confBusqueda));
				/*if(isset($_POST['debug']) and $_POST['debug'] == 1) {
					echo('linea 8302');	
					echo($data); 
					echo("\n\n\n"); 
				
				} */

				//-- inicio del cURL. ---------------------------------------------------------------------//
				$curl = curl_init();

				curl_setopt_array($curl, array(
					CURLOPT_URL => env('PEP_NV_URL_CONSULTA'),
					CURLOPT_RETURNTRANSFER => true,
					CURLOPT_ENCODING => '',
					CURLOPT_MAXREDIRS => 10,
					CURLOPT_TIMEOUT => 0,
					CURLOPT_FOLLOWLOCATION => true,
					CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
					CURLOPT_CUSTOMREQUEST => 'POST',
					CURLOPT_POSTFIELDS => $data,
					CURLOPT_HTTPHEADER => array(
						'Authorization: Bearer '.$token,
						'Content-Type: application/json'
					),
				));

				$response = curl_exec($curl);
				curl_close($curl);
				//-- Fin del cURL. -------------------------------------------------------------------------//

				//-- Se convierte a json la respuesta doda que viene como un String.

				//-- > SECCION PARA DEBUG, MUESTRA EL DATO EN CRUDO DE WS.  --//
				if(isset($_POST['debug']) and $_POST['debug'] == 1) {
					echo('linea 8318');	
					echo("\nPais: " . $pais);  	
					echo("\nidTributaria: " . $idTributaria);  	
					echo("\nTax_id_valido: " . self::tax_id_valido($idTributaria));  	
					echo("\nnombre: " . $nombre); 
					echo("\nresponse: " . ($response));  	
					echo("\n\n\n"); 
				
				}

			
				$response = json_decode($response, true)['hits'];

				//------------------------------------------------------------//

				if($pais == 'AR' and self::tax_id_valido($idTributaria) and $nombre !== '') {

					//-- BUsqueda por cuit/cuil
					foreach ($response as $key) {
						
						if(($pais == $key['residencia'] and $key['idTributaria'] == $idTributaria) || ($pais == $key['residencia'] and $key['idTributaria'] == '' and Misc::esElMismoNombreWs($nombre, $key['nombre']) and $key['fuente']['kind']['code'] == 'SAN')) {	

							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				} else if($pais == 'AR' and self::tax_id_valido($idTributaria) and $nombre == '') {
					//-- BUsqueda por cuit/cuil




					foreach ($response as $key) {
						if($pais == $key['residencia'] and $key['idTributaria'] == $idTributaria) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $persona->DescripcionFuente$principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);

					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				} else if($pais !== '' and strlen($nombre) > 2) {
					//-- Busqueda por pais y nombre
					foreach ($response as $key) {
						if($pais == $key['residencia'] and Misc::esElMismoNombreWs($nombre, $key['nombre'])) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							///-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);
					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);


					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				} else {
					//-- Busqueda libre por nombre


					foreach ($response as $key) {
						if(Misc::esElMismoNombreWs($nombre, $key['nombre'])) {
							$datosParaGuardar = array();
							$persona = new \stdClass;

							//-- Esta variables son tipo swap, no tocar  --//
							$persona->tipoFuente = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
							$persona->FechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
							//---------------------------------------------//

							//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
							$persona->cuit = isset($key['idTributaria']) ? $key['idTributaria'] : ''; //-> ok
							$datosParaGuardar[0] = $persona->cuit; 
							$persona->nombre_persona = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[1] = $persona->nombre_persona;
							$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
							$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
							$persona->StatusCode = '200'; //-> ok
							$datosParaGuardar[4] = $persona->StatusCode;
							$persona->Status = 'OK'; //-> ok
							$datosParaGuardar[5] = $persona->Status;
							$persona->Reason = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : ''; //-> ok
							$datosParaGuardar[6] = $persona->Reason;
							$persona->Id = isset($key['sdnId']) ? $key['sdnId'] : ''; //-> ok
							$datosParaGuardar[7] = $persona->Id;
							$persona->Fuente = isset($key['fuente']['name']) ? $key['fuente']['name'] : ''; //-> ok
							$datosParaGuardar[8] = $persona->Fuente;
							$persona->NombreModificado = isset($key['nombre']) ? $key['nombre'] : ''; //-> ok
							$datosParaGuardar[9] = $persona->NombreModificado;
							$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
							$datosParaGuardar[10] = $persona->DocumentoBuscado;
							$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
							$datosParaGuardar[11] = $persona->NombreBuscado;
							$persona->Documento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[12] = $persona->Documento;
							$persona->Residencia = isset($key['residencia']) ? $key['residencia'] : ''; //-> ok
							$datosParaGuardar[14] = $persona->Residencia;
							$persona->DescripcionPais = isset($key['pais']) ? $key['pais'] : ''; //-> ok
							$datosParaGuardar[15] = $persona->DescripcionPais;
							$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
							$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
							$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
							$persona->PorcentajeSimilitud = isset($key['score']) ? $key['score'] : ''; //-> ok
							$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
							$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
							$datosParaGuardar[20] = $persona->fidecheck;
							$persona->Codigo = isset($key['id']) ? $key['id'] : ''; //-> ok
							$datosParaGuardar[21] = $persona->Codigo;
							$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
							$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
							$datosParaGuardar[23] = $persona->FechaNovedad;
							$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
							$persona->Cargo = isset($key['cargo']) ? $key['cargo'] : ''; //-> ok
							$datosParaGuardar[24] = $persona->Cargo;
							$persona->Institucion = isset($key['institucion']) ? $key['institucion'] : ''; //-> ok
							$datosParaGuardar[25] = $persona->Institucion;
							$persona->Domicilio = isset($key['domicilio']) ? $key['domicilio'] : ''; //-> ok
							$datosParaGuardar[26] = $persona->Domicilio;
							$persona->NumeroDocumento = isset($key['documento']) ? $key['documento'] : ''; //-> ok
							$datosParaGuardar[27] = $persona->NumeroDocumento;
							$persona->NumeroIdTributaria = $persona->cuit; //-> ok
							$datosParaGuardar[28] = $persona->NumeroIdTributaria;
							$persona->Url = isset($key['url']) ? $key['url'] : ''; //-> ok
							$datosParaGuardar[29] = $persona->Url;
							$persona->Relacion = $persona->relacion; //->ok
							$datosParaGuardar[30] = $persona->Relacion;
							$persona->orden = ''; //-> ver esto para que se esta usando.
							$persona->TipoFuente = $persona->tipoFuente; //-> ok
							$datosParaGuardar[13] = $persona->TipoFuente;
							//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
							$persona->DescripcionFuente = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; 
							//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
							$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
							$persona->visible = '1'; //-> se e coloca 1 por default.
							
							$principalLista = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : ''; //-> ok
							$datosParaGuardar[31] = $principalLista;
							//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
							//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
							//---- $datosParaGuardar[32] = $principalListaDescripcion;
							$datosParaGuardar[32] = $persona->DescripcionFuente;
							$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[33] = $paisSwift;
							$tipoNovedad = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
							$datosParaGuardar[34] = $tipoNovedad;
							$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[35] = $idOrigRel;
							$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[36] = $principalFuente;
							$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[37] = $observaciones;
							$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
							$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[39] = $urlNew;
							$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[40] = $normaUif;
							$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[41] = $normaUifDescripcion;
							$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[42] = $fuenteLista;
							$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[43] = $fuenteActiva;
							//--> $fuenteDescripcion = $persona->PrincipalLista;
							$fuenteDescripcion = $principalLista;
							$datosParaGuardar[44] = $fuenteDescripcion;
							$fuenteDescripcionLarga = $persona->DescripcionFuente;
							$datosParaGuardar[45] = $fuenteDescripcionLarga;
							$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[46] = $fuenteTipo;
							$fuenteImagen = isset($key['fuente']['logoUrl']) ? $key['fuente']['logoUrl'] : '';
							$datosParaGuardar[47] = $fuenteImagen;
							$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
							$datosParaGuardar[48] = $fuenteActualizaxml;
							$lista[] = $persona;
							//echo("aca tarda"); die();
							$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
						}
					}
					$codigo = 200;
					if(count($lista) < 1) {
						$lista = self::auxiliarParaFidechek($idTributaria,$nombre);


					}
					$lista = self::manejadoRespuesta($lista, $nroProducto);
					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);

				}
				//-- EVALUAR SI ESTE if SIGUE SIENDO NECESARIO  --//
				if(count($lista) == 0) {




					$datosParaGuardar = array();
					$persona = new \stdClass;

					//-- Esta variables son tipo swap, no tocar  --//
					$persona->tipoFuente = '';
					$persona->relacion = '';
					$persona->FechaNovedad = '';
					//---------------------------------------------//

					//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 
					$persona->cuit = ''; //-> ok
					$datosParaGuardar[0] = $persona->cuit; 
					$persona->nombre_persona = ''; //-> ok
					$datosParaGuardar[1] = $persona->nombre_persona;
					$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
					$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
					$persona->StatusCode = '200'; //-> ok
					$datosParaGuardar[4] = $persona->StatusCode;
					$persona->Status = 'OK'; //-> ok
					$datosParaGuardar[5] = $persona->Status;
					$persona->Reason = ''; //-> ok
					$datosParaGuardar[6] = $persona->Reason;
					$persona->Id = ''; //-> ok
					$datosParaGuardar[7] = $persona->Id;
					$persona->Fuente = ''; //-> ok
					$datosParaGuardar[8] = $persona->Fuente;
					$persona->NombreModificado = ''; //-> ok
					$datosParaGuardar[9] = $persona->NombreModificado;
					$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
					$datosParaGuardar[10] = $persona->DocumentoBuscado;
					$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
					$datosParaGuardar[11] = $persona->NombreBuscado;
					$persona->Documento = ''; //-> ok
					$datosParaGuardar[12] = $persona->Documento;
					$persona->Residencia = ''; //-> ok
					$datosParaGuardar[14] = $persona->Residencia;
					$persona->DescripcionPais = ''; //-> ok
					$datosParaGuardar[15] = $persona->DescripcionPais;
					$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
					$datosParaGuardar[17] = '1'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
					$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
					$persona->PorcentajeSimilitud = ''; //-> ok
					$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
					$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
					$datosParaGuardar[20] = $persona->fidecheck;
					$persona->Codigo = ''; //-> ok
					$datosParaGuardar[21] = $persona->Codigo;
					$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
					$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
					$datosParaGuardar[23] = $persona->FechaNovedad;
					$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
					$persona->Cargo = ''; //-> ok
					$datosParaGuardar[24] = $persona->Cargo;
					$persona->Institucion = ''; //-> ok
					$datosParaGuardar[25] = $persona->Institucion;
					$persona->Domicilio = ''; //-> ok
					$datosParaGuardar[26] = $persona->Domicilio;
					$persona->NumeroDocumento = ''; //-> ok
					$datosParaGuardar[27] = $persona->NumeroDocumento;
					$persona->NumeroIdTributaria = $persona->cuit; //-> ok
					$datosParaGuardar[28] = $persona->NumeroIdTributaria;
					$persona->Url = ''; //-> ok
					$datosParaGuardar[29] = $persona->Url;
					$persona->Relacion = $persona->relacion; //->ok
					$datosParaGuardar[30] = $persona->Relacion;
					$persona->orden = ''; //-> ver esto para que se esta usando.
					$persona->TipoFuente = $persona->tipoFuente; //-> ok
					$datosParaGuardar[13] = $persona->TipoFuente;
					//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
					$persona->DescripcionFuente = ''; 
					//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
					$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
					$persona->visible = '1'; //-> se e coloca 1 por default.
					
					$principalLista = ''; //-> ok
					$datosParaGuardar[31] = $principalLista;
					//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
					//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
					//---- $datosParaGuardar[32] = $principalListaDescripcion;
					$datosParaGuardar[32] = $persona->DescripcionFuente;
					$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[33] = $paisSwift;
					$tipoNovedad = '';
					$datosParaGuardar[34] = $tipoNovedad;
					$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[35] = $idOrigRel;
					$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[36] = $principalFuente;
					$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[37] = $observaciones;
					$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
					$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[39] = $urlNew;
					$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[40] = $normaUif;
					$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[41] = $normaUifDescripcion;
					$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[42] = $fuenteLista;
					$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[43] = $fuenteActiva;
					//--> $fuenteDescripcion = $persona->PrincipalLista;
					$fuenteDescripcion = $principalLista;
					$datosParaGuardar[44] = $fuenteDescripcion;
					$fuenteDescripcionLarga = $persona->DescripcionFuente;
					$datosParaGuardar[45] = $fuenteDescripcionLarga;
					$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[46] = $fuenteTipo;
					$fuenteImagen = '';
					$datosParaGuardar[47] = $fuenteImagen;
					$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
					$datosParaGuardar[48] = $fuenteActualizaxml;
					$lista[] = $persona;
					//echo("aca tarda"); die();
					//$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);
					$codigo = 200;
					$lista = self::manejadoRespuesta($lista, $nroProducto);


					return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
				}
				// $codigo = 200;
				// $lista = self::manejadoRespuesta($lista, $nroProducto);
				// return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'country_code' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
			}
		} catch (\Throwable $th) {
			$mensaje = 'Error al consultar nueva api ws desarrollo. <br> Error: '.$th->getMessage().'<br>Linea: '.$th->getLine();
            Misc::enviarMail_errores_api($mensaje);
			$codigo = 401;


			return json_encode(['Params' => array('full_name' => $nombre, 'tax_id' => $idTributaria, 'PAIS' => $pais, 'count' => count($lista), 'status_code' => $codigo,'status' => self::erroresWsV2($codigo), 'transaction_id' => $id_consumo), 'response' => $lista]);
		}
		
    }
    

	static function auxiliarParaFidechek($idTributaria,$nombre) {
		$datosParaGuardar = array();
		$lista = array();
		$persona = new \stdClass;

		//-- Esta variables son tipo swap, no tocar  --//
		$persona->tipoFuente = '';
		$persona->relacion = '';
		$persona->FechaNovedad = '';
		//---------------------------------------------//

		//$persona->id_resultado = isset($key['id']) ? $key['id'] : ''; //-> Este es el id que anteriormente se usaba, era devuelto por la mdalidad antigua y solo era previo al insert 

		//$persona->cuit = ''; //-> ok
		$persona->cuit = $idTributaria; //-> ok
		$datosParaGuardar[0] = $persona->cuit; 
		//$persona->nombre_persona = ''; //-> ok
		$persona->nombre_persona = $nombre; //-> ok
		$datosParaGuardar[1] = $persona->nombre_persona;

		$datosParaGuardar[2] = '0'; //-> Este es el id_padron qu eespera el store.
		$datosParaGuardar[3] = 'worldsys'; //-> este es el parametro ws que espera el store.
		$persona->StatusCode = '200'; //-> ok
		$datosParaGuardar[4] = $persona->StatusCode;
		$persona->Status = 'OK'; //-> ok
		$datosParaGuardar[5] = $persona->Status;
		$persona->Reason = ''; //-> ok
		$datosParaGuardar[6] = $persona->Reason;
		$persona->Id = ''; //-> ok
		$datosParaGuardar[7] = $persona->Id;
		$persona->Fuente = ''; //-> ok
		$datosParaGuardar[8] = $persona->Fuente;
		$persona->NombreModificado = ''; //-> ok
		$datosParaGuardar[9] = $persona->NombreModificado;
		$persona->DocumentoBuscado = isset($idTributaria) ? $idTributaria : ''; //-> ok
		$datosParaGuardar[10] = $persona->DocumentoBuscado;
		$persona->NombreBuscado = isset($nombre) ? $nombre : ''; //-> ok
		$datosParaGuardar[11] = $persona->NombreBuscado;
		$persona->Documento = ''; //-> ok
		$datosParaGuardar[12] = $persona->Documento;
		$persona->Residencia = ''; //-> ok
		$datosParaGuardar[14] = $persona->Residencia;
		$persona->DescripcionPais = ''; //-> ok
		$datosParaGuardar[15] = $persona->DescripcionPais;
		$datosParaGuardar[16] = ''; //--> esto es para pais no colaborativo, se manda asi porque ya no viene en la respuesta ws.
		$datosParaGuardar[17] = '0'; //--> esto es Hallazgos, se manda asi porque ws cambio la estructura.
		$datosParaGuardar[18] = ''; //-> esto es ExisteDocumentacion, se manda asi por cambio de ws.
		$persona->PorcentajeSimilitud = ''; //-> ok
		$datosParaGuardar[19] = $persona->PorcentajeSimilitud;
		$persona->fidecheck = self::colorFidecheck($persona->tipoFuente, $persona->relacion);
		$datosParaGuardar[20] = $persona->fidecheck;
		$persona->Codigo = ''; //-> ok
		$datosParaGuardar[21] = $persona->Codigo;
		$datosParaGuardar[22] = ''; //-> esto es TipoFuenteMasDatos, se envia vacio porque ws cambio estructura.
		$persona->FechaNovedad = self::limpiarFechaWs($persona->FechaNovedad);
		$datosParaGuardar[23] = $persona->FechaNovedad;
		$persona->FechaNovedaddmy = self::formatoArgentina($persona->FechaNovedad);
		$persona->Cargo = ''; //-> ok
		$datosParaGuardar[24] = $persona->Cargo;
		$persona->Institucion = ''; //-> ok
		$datosParaGuardar[25] = $persona->Institucion;
		$persona->Domicilio = ''; //-> ok
		$datosParaGuardar[26] = $persona->Domicilio;
		$persona->NumeroDocumento = ''; //-> ok
		$datosParaGuardar[27] = $persona->NumeroDocumento;
		$persona->NumeroIdTributaria = $persona->cuit; //-> ok
		$datosParaGuardar[28] = $persona->NumeroIdTributaria;
		$persona->Url = ''; //-> ok
		$datosParaGuardar[29] = $persona->Url;
		$persona->Relacion = $persona->relacion; //->ok
		$datosParaGuardar[30] = $persona->Relacion;
		$persona->orden = ''; //-> ver esto para que se esta usando.
		$persona->TipoFuente = $persona->tipoFuente; //-> ok
		$datosParaGuardar[13] = $persona->TipoFuente;
		//--> $persona->DescripcionFuente = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
		$persona->DescripcionFuente = ''; 
		//$persona->con_datos = $key->con_datos;  //-> ver si esto se usa para algo
		$persona->fecha = $persona->FechaNovedaddmy;  //-> Esta fecha debe ser formateada a formato argentina
		$persona->visible = '1'; //-> se e coloca 1 por default.
		
		$principalLista = ''; //-> ok
		$datosParaGuardar[31] = $principalLista;
		//--> $datosParaGuardar[31] = $persona->DescripcionFuente;
		//----- $principalListaDescripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : ''; //-> ok
		//---- $datosParaGuardar[32] = $principalListaDescripcion;
		$datosParaGuardar[32] = $persona->DescripcionFuente;
		$paisSwift = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[33] = $paisSwift;
		$tipoNovedad = '';
		$datosParaGuardar[34] = $tipoNovedad;
		$idOrigRel = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[35] = $idOrigRel;
		$principalFuente = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[36] = $principalFuente;
		$observaciones = ''; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[37] = $observaciones;
		$datosParaGuardar[38] = $persona->DescripcionPais; //-> esto es para el valor pais que espera el store.
		$urlNew = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[39] = $urlNew;
		$normaUif = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[40] = $normaUif;
		$normaUifDescripcion = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[41] = $normaUifDescripcion;
		$fuenteLista = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[42] = $fuenteLista;
		$fuenteActiva = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[43] = $fuenteActiva;
		//--> $fuenteDescripcion = $persona->PrincipalLista;
		$fuenteDescripcion = $principalLista;
		$datosParaGuardar[44] = $fuenteDescripcion;
		$fuenteDescripcionLarga = $persona->DescripcionFuente;
		$datosParaGuardar[45] = $fuenteDescripcionLarga;
		$fuenteTipo = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[46] = $fuenteTipo;
		$fuenteImagen = '';
		$datosParaGuardar[47] = $fuenteImagen;
		$fuenteActualizaxml = 'null'; //-> se envia asi porque ya no lo devuelve ws.
		$datosParaGuardar[48] = $fuenteActualizaxml;
		$lista[] = $persona;
		/* 03/11/2022: Para guardar las consultas que ws no devuelve resultado */

		$rr = SQLConnection::backendStoreProcedure('LN_Fidecheck_API_Data', $datosParaGuardar);

/**/
		return $lista;
		// return array($lista,$datosParaGuardar);
	}

	//-- BackUp, no tocar  --//
	static function consultaWs_BackUp() {
		//-- Datos del usuario en session.
		$usuario        = Session::get('usuario');
		
		//-- Lista que contendra los datos finales.
        $lista = array();

		//-- Variable para el codigo de status
		$codigo = '';

		//-- Variables recibidas.
		$idTributaria = trim(isset($_POST['tax_id']) ? $_POST['tax_id'] : (isset($_POST['TAX_ID']) ? $_POST['TAX_ID'] : ''));
		$dni = trim(isset($_POST['dni']) ? $_POST['dni'] : (isset($_POST['DNI']) ? $_POST['DNI'] : ''));
		$nombre = trim(isset($_POST['name']) ? $_POST['name'] : (isset($_POST['NAME']) ? $_POST['NAME'] : ''));
		$pais = strtoupper(trim(isset($_POST['pais']) ? $_POST['pais'] : (isset($_POST['PAIS']) ? $_POST['PAIS'] : '')));

		//-- Se pide el token a la DB, sino se encuentra vigente se solicita uno nuevo. Esta funcion ya informa en caso de no poder obtenerlo.
        $token = self::pedirToken();

		//-- Seccion para validaciones varias.
		if(strlen($pais) > 2) {
			$codigo = 100;
		} else if($idTributaria == '' and $dni == '' and $nombre == '') {
			$codigo = 300;
		} else if(!isset($token) || is_null($token)) {
			$codigo = 400;
		}

		if($codigo != '') {
			return json_encode(['Params' => array('name' => $nombre, 'TAX_ID' => $idTributaria, 'DNI' => $dni, 'PAIS' => $pais, 'COUNT' => count($lista), 'STATUS_CODE' => $codigo,'STATUS' => self::erroresWsV2($codigo)), 'response' => $lista]);
		}
		
		//-- Variables de entorno.
        $identificacion = env('PEP_NV_IDENTIFICACION');
        $confBusqueda = env('PEP_NV_BUSQUEDA');

		//-- Armado de datos para la consulta a WS.
        $data = json_encode(array("Identification" => $identificacion, "Nombre" => $nombre, "Documento" => $dni, "IdTributaria" => $idTributaria, "ConfigurationName" => $confBusqueda));

		//-- inicio del cURL. ---------------------------------------------------------------------//
        $curl = curl_init();

        curl_setopt_array($curl, array(
            CURLOPT_URL => 'https://worldsys.apicompliance.worldsysweb.com/api/ldi/v1/Evaluate',
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 0,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => $data,
            CURLOPT_HTTPHEADER => array(
                'Authorization: Bearer '.$token,
                'Content-Type: application/json'
              ),
        ));

        $response = curl_exec($curl);
        curl_close($curl);
		//-- Fin del cURL. -------------------------------------------------------------------------//

		//-- Se convierte a json la respuesta doda que viene como un String.
        $response = json_decode($response, true)['hits'];

		//--  Proceso de clasificacion de datos.
        foreach ($response as $key) {
            if($pais == 'AR') {
                //-- Esta es la seccion si se envia el parametro 'AR'
                if($pais == $key['residencia'] and (($key['idTributaria'] == $idTributaria and $idTributaria != '') || (Misc::esElMismoNombre($nombre, $key['nombre']) and $key['fuente']['kind']['code'] == 'SAN' and $key['idTributaria'] == ''))) {
                    $persona = new \stdClass;
                    $persona->nombre = isset($key['nombre']) ? $key['nombre'] : '';
                    $persona->documento = isset($key['documento']) ? $key['documento'] : '';
                    $persona->taxId = isset($key['idTributaria']) ? $key['idTributaria'] : '';
                    $persona->fechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
                    $persona->cargo = isset($key['cargo']) ? $key['cargo'] : '';
                    $persona->domicilio = isset($key['domicilio']) ? $key['domicilio'] : '';
                    $persona->institucion = isset($key['institucion']) ? $key['institucion'] : '';
                    $persona->pais = isset($key['pais']) ? $key['pais'] : '';
                    $persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
                    $persona->residencia = isset($key['residencia']) ? $key['residencia'] : '';
                    $persona->lista_codigo = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
                    $persona->lista_label = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : '';
                    $persona->lista_resumen = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
                    $persona->lista_descripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : '';
                    $persona->url = isset($key['url']) ? $key['url'] : '';
                    $lista[] = $persona;
                }

            } else if($pais == $key['residencia'] and Misc::esElMismoNombre($nombre, $key['nombre'])) {
				//-- Seccion para la busqueda fuera de 'AR'
                $persona = new \stdClass;
                $persona->nombre = isset($key['nombre']) ? $key['nombre'] : '';
                $persona->documento = isset($key['documento']) ? $key['documento'] : '';
                $persona->taxId = isset($key['idTributaria']) ? $key['idTributaria'] : '';
                $persona->fechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
                $persona->cargo = isset($key['cargo']) ? $key['cargo'] : '';
                $persona->domicilio = isset($key['domicilio']) ? $key['domicilio'] : '';
                $persona->institucion = isset($key['institucion']) ? $key['institucion'] : '';
                $persona->pais = isset($key['pais']) ? $key['pais'] : '';
                $persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
                $persona->residencia = isset($key['residencia']) ? $key['residencia'] : '';
                $persona->lista_codigo = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
                $persona->lista_label = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : '';
                $persona->lista_resumen = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
                $persona->lista_descripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : '';
                $persona->url = isset($key['url']) ? $key['url'] : '';
                $lista[] = $persona;

			} else if($pais == '') {
                //-- Seccion para la busqueda fuera de 'AR'
                $persona = new \stdClass;
                $persona->nombre = isset($key['nombre']) ? $key['nombre'] : '';
                $persona->documento = isset($key['documento']) ? $key['documento'] : '';
                $persona->taxId = isset($key['idTributaria']) ? $key['idTributaria'] : '';
                $persona->fechaNovedad = isset($key['fechaNovedad']) ? $key['fechaNovedad'] : '';
                $persona->cargo = isset($key['cargo']) ? $key['cargo'] : '';
                $persona->domicilio = isset($key['domicilio']) ? $key['domicilio'] : '';
                $persona->institucion = isset($key['institucion']) ? $key['institucion'] : '';
                $persona->pais = isset($key['pais']) ? $key['pais'] : '';
                $persona->relacion = isset($key['relacion']) ? $key['relacion'] : '';
                $persona->residencia = isset($key['residencia']) ? $key['residencia'] : '';
                $persona->lista_codigo = isset($key['fuente']['kind']['code']) ? $key['fuente']['kind']['code'] : '';
                $persona->lista_label = isset($key['fuente']['kind']['legend']) ? $key['fuente']['kind']['legend'] : '';
                $persona->lista_resumen = isset($key['fuente']['caption']) ? $key['fuente']['caption'] : '';
                $persona->lista_descripcion = isset($key['fuente']['description']) ? $key['fuente']['description'] : '';
                $persona->url = isset($key['url']) ? $key['url'] : '';
                $lista[] = $persona;
            }
                        
        }
		$codigo = 200;
        return json_encode(['Params' => array('name' => $nombre, 'TAX_ID' => $idTributaria, 'DNI' => $dni, 'PAIS' => $pais, 'COUNT' => count($lista), 'STATUS_CODE' => $codigo,'STATUS' => self::erroresWsV2($codigo)), 'response' => $lista]);
    }
	//----------------------------------------------------------------------------------------------------------//

	// =================================================
	// ---------- SECCION API IMPERIUM-ACCESO ----------
	// =================================================

	static function imperiumControlAccesoData(){
		// CAPTURO DATOS ENVIADO
		$cli = Session::get('usuario')->cliente['client_id'];
		// $cli = Request::input('cli'); // -> TEST
		$usr = Session::get('usuario')->user_id;
		$id_padron = Request::input('id_padron') ?? null;
		$num = Request::input('tax_id') ?? null;
		$dominio = !empty(Request::input('dominio')) ? Request::input('dominio') : NULL;
		$locacion = Request::input('locacion') ?? null;
		$tipo_acceso = Request::input('tipo_acceso') ?? null;
		$apikey = Request::input('apikey');
		// ARMO EL OBJETO ENVIADOS PARA MOSTRAR AL USUARIO LOS DATOS ENVIADOS		
		$enviados = (object)[];
		$enviados->tax_id_persona = $num;
		$enviados->dominio = $dominio;
		$enviados->punto_acceso = $locacion;
		$enviados->tipo_acceso = $tipo_acceso;
		// VALIDACIÓN INICIAL, QUE EXISTAN LOS DATOS Y QUE SEAN EL TIPO DE DATOS CORRECTO
		if( isset($_POST['apikey']) && (isset($_POST['tax_id']) && is_numeric($_POST['tax_id'])) && (isset($_POST['locacion']) && is_numeric($_POST['locacion'])) && isset($_POST['tipo_acceso'])){

			// Busco el dato de la identificación fiscal dentro de los contratistas y empleados del cliente
			$acceso = SQLConnection::backendStoreProcedure('Imperium_buscar_identificacion_acceso', array($cli, $id_padron, $num), 'select');
			// if (is_array($acceso)){
			// 	$acceso = $acceso[1];
			// }
			if ($tipo_acceso == 'I'){ $tipo_acceso = 'Ingreso';} elseif ($tipo_acceso == 'E'){$tipo_acceso = 'Egreso';}
			// $reporte = !empty(Request::input('reporte')) ? Request::input('reporte') : "NO";

			$loc = SQLConnection::backendStoreProcedure('Imperium_buscar_locaciones', array(NULL, NULL, $locacion), 'selectOne');
			$seccion = (!empty($acceso[0])) ? $acceso[0]->led_seccion : null;

			// ID de contratista o ID de empleado y acecso
			$id = null;
			if (!empty($acceso[0])){
				$id = ($acceso[0]->led_seccion == 'E') ? $acceso[0]->empleado : $acceso[0]->contratista;
			}
			$data_acceso = SQLConnection::backendStoreProcedure('Imperium_Control_Acceso', array($cli, $locacion, $seccion, ($seccion == 'C' ? $id : NULL), ($seccion == 'E' ? $id : NULL)), 'selectOne');
			if ( $data_acceso == null ) {
				$seccion = (!empty($acceso[1])) ? $acceso[1]->led_seccion : null;
				$id = ($acceso[1]->led_seccion == 'E') ? $acceso[1]->empleado : $acceso[1]->contratista;
				$data_acceso = SQLConnection::backendStoreProcedure('Imperium_Control_Acceso', array($cli, $locacion, $seccion, ($seccion == 'C' ? $id : NULL), ($seccion == 'E' ? $id : NULL)), 'selectOne');
			}
			$acceso_autorizado_empleado = (!is_null($data_acceso) && $data_acceso->acceso == 0) ? 'Rechazado' : 'Aprobado';
			
			// Docs pendientes del empleado
			$docs = SQLConnection::backendStoreProcedure('Imperium_Control_Acceso_Documentacion', array($seccion, $id), 'select');
			$docs_pendientes = [];
			$pendientes = 0;
			foreach($docs as $key => $d) { 
				$d->estado_doc != 'V' ? $pendientes++ : $pendientes;
				if ($d->estado_doc != 'V') {
					$doc_pendiente = $d->nombre_tipo_doc . ' - Período ' . substr_replace($d->periodo,'-',4,0) . ' - A verificar por ';
					if ($d->verificacion == 'F') { 
						$doc_pendiente = $doc_pendiente . 'Fidelitas';
					} elseif ($d->verificacion == 'C') { 
						$doc_pendiente = $doc_pendiente . $d->nombre_cliente;
					}
					array_push($docs_pendientes,$doc_pendiente);
				}
			}

			// Datos y acceso del vehículo en caso de haberse ingresado un dominio
			$data_vehiculo = NULL;
			$acceso_vehiculo = NULL;
			$docs_veh = NULL;
			$docs_pendientes_veh = [];
			$pendientes_veh = 0;
			$acceso_autorizado_vehiculo = null;
			if (!empty($dominio)) {
				$data_vehiculo = SQLConnection::backendStoreProcedure('Imperium_buscar_vehiculos', array('search', NULL, NULL, NULL, NULL, NULL, $dominio), 'selectOne');
				if(!empty($data_vehiculo)) {
					$acceso_vehiculo = SQLConnection::backendStoreProcedure('Imperium_Control_Acceso', array($cli, $locacion, 'V', NULL, NULL, $data_vehiculo->vehiculo), 'selectOne');
					$docs_veh = SQLConnection::backendStoreProcedure('Imperium_Control_Acceso_Documentacion', array('V', $data_vehiculo->vehiculo), 'select');
					$acceso_autorizado_vehiculo = (!is_null($acceso_vehiculo) && $acceso_vehiculo->acceso == 0) ? 'Rechazado' : 'Aprobado';
					if ( !is_null($data_vehiculo) && !is_null($data_acceso) && $data_vehiculo->contratista_1 != $data_acceso->contratista_1 ) {
						$acceso_autorizado_vehiculo = 'El dominio indicado no pertenece al contratista';
					} else {
						foreach($docs_veh as $dv) { 
							$dv->estado_doc != 'V' ? $pendientes_veh++ : $pendientes_veh; 
							if ($dv->estado_doc != 'V') {
								$doc_pendiente = $dv->nombre_tipo_doc . ' - Período ' . substr_replace($dv->periodo,'-',4,0) . ' - A verificar por ';
								if ($dv->verificacion == 'F') { 
									$doc_pendiente = $doc_pendiente . 'Fidelitas';
								} elseif ($dv->verificacion == 'C') { 
									$doc_pendiente = $doc_pendiente . $dv->nombre_cliente;
								}
								array_push($docs_pendientes_veh,$doc_pendiente);
							}
						}
					}
					
				} else {
					$acceso_autorizado_vehiculo = 'No hay datos de dominio';
				}
			}

			// Genero objetos con los datos recolectados de la persona y el vehículo que desea ingresar y los devuelvo en formato json
			$response = (object)[];
			$personas = (object)[];
			$vehiculo = (object)[];
			// LOCACION
			$personas->punto_acceso = $loc->nombre_locacion;
			$personas->tipo_acceso = $tipo_acceso;
			// CONTRATISTA
			$personas->contratista_nombre = ($data_acceso->nombre_contratista_1) ?? null;
			$personas->contratista_tipo_tax_id = (!is_null($personas->contratista_nombre) && !is_null($data_acceso->abreviatura_1)) ? $data_acceso->abreviatura_1 : null;
			$personas->contratista_tax_id = (!is_null($personas->contratista_nombre) && !is_null($data_acceso->identificacion_1)) ? $data_acceso->identificacion_1 : null;
			// SUBCONTRATISTA (SI HUBIERA)
			$personas->subcontratista_nombre = ($data_acceso->nombre_contratista_0) ?? null;
			$personas->subcontratista_tipo_tax_id = (!is_null($personas->subcontratista_nombre) && !is_null($data_acceso->abreviatura_0)) ? $data_acceso->abreviatura_0 : null;
			$personas->subcontratista_tax_id = (!is_null($personas->subcontratista_nombre) && !is_null($data_acceso->identificacion_0)) ? $data_acceso->identificacion_0 : null;
			// EMPLEADO
			$personas->empleado_nombre = ($data_acceso->nombre_persona) ?? null;
			$personas->empleado_tipo_tax_id = (!is_null($personas->empleado_nombre) && !is_null($data_acceso->abreviatura)) ? $data_acceso->abreviatura : null;
			$personas->empleado_tax_id = (!is_null($personas->empleado_nombre) && !is_null($data_acceso->identificacion)) ? $data_acceso->identificacion : null;
			// DOCUMENTACION PENDIENTE Y ESTADO EMPLEADO
			$personas->cantidad_docs_pendientes = $pendientes;
			$personas->docs_pendientes = $docs_pendientes;
			$personas->estado_acceso_empleado = $acceso_autorizado_empleado;
			// VEHÍCULO
			$vehiculo->dominio = $dominio;
			$vehiculo->vehiculo_nombre = ($data_vehiculo->nombre_vehiculo) ?? null;
			// DOCUMENTACION PENDIENTE Y ESTADO VEHÍCULO
			$vehiculo->vehiculo_cantidad_docs_pendientes = $pendientes_veh;	
			$vehiculo->vehiculo_docs = $docs_pendientes_veh;
			$vehiculo->estado_acceso_vehiculo = $acceso_autorizado_vehiculo;
			// ESTRUCTURA FINAL DE JSON
			$response->fecha_consulta = date("Y-m-d H:i:s");			
			$response->personas = $personas;
			$response->vehiculo = $vehiculo;
			if ($personas->empleado_nombre == null || $personas->contratista_nombre == null) {
				return json_encode([
					'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'Los datos enviados son inválidos','Response'=>[]
				]);
			}
			return (json_encode([
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$response
			]));
		} else {			
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'Alguno de los datos principales no es correcto o está vacío','Response'=>[]
			]);
		}
	}



	//---------------------------------------------------------------------------------------------------------------//
	
	public static function idphone(){
		$usuario    			= Session::get('usuario');
		$user_id    			= $usuario->user_id;
		$phonenumber   			= trim(Request::input('phonenumber'));
		//---
		$enviados['phonenumber']= $phonenumber;
		//------

		if(empty($phonenumber)){
			return json_encode(['Parameters'=>$enviados,'Status'=>'0','Message'=>'PHONENUMBER CANNOT BE NULL','Response'=>[]]);
		}

		$producto = $usuario->producto ?? 100;
		$resp = self::consumir_servicio($phonenumber,$producto);

		/* Para cada cuit encontrado */ 
		/*
		name,
		surname,
		national_ID,
		tax_id,
		legal_address,
		fiscal_address,
		business_activity  (code and description),
		date of birth (DOB),
		date of decease (DOD),
		email,
		credit_score (0 to 100)
		*/

		$cuits = SQLConnection::backendStoreProcedure('api_idphone', array($phonenumber));

		$persona = []; 
		foreach ($cuits as $key => $value) {
			 	//AFIPController::obtenerPadron($value->identificacion,true,'AR',false);
				$score  = json_decode(self::obtenerServicioScore($value->identificacion,true,false)); // Aca adentro esta la llamada a AFIP

			 	$datos_persona = SQLConnection::backendStoreProcedure('obtener_persona', array($value->identificacion),true);

				$persona[$key] = new StdClass(); 
				if ($datos_persona->tipo_persona == 'J')
				{
					$datos_persona->apellidos = '';
					$datos_persona->nombres   = $datos_persona->nombre_persona;
					$datos_persona->cuerpo_clave = '';
				}
				else 
				{
					if ($datos_persona->nombres == null && $datos_persona->apellidos == null)
					{
						$datos_persona->apellidos = $datos_persona->nombre_persona;
					}
					if ($datos_persona->nombres == null && $datos_persona->apellidos !== null)
					{
						$separada = explode(' ', $datos_persona->apellidos);
						$datos_persona->apellidos = $separada[0];
						unset($separada[0]);
						$datos_persona->nombres = implode(' ',$separada);
					}
				}
				$persona[$key]->name              = $datos_persona->nombres ?? '';
				$persona[$key]->surname           = $datos_persona->apellidos ?? '';
				$persona[$key]->national_ID       = $datos_persona->cuerpo_clave ?? '';;
				$persona[$key]->tax_id            = $datos_persona->identificacion ?? '';;
				$persona[$key]->legal_address     = new StdClass(); 
				$persona[$key]->fiscal_address    = new StdClass(); 
				$persona[$key]->business_activity = new StdClass();
				$persona[$key]->business_activity->code        = '';
				$persona[$key]->business_activity->description = '';
				$persona[$key]->DOB               = $datos_persona->c02_fecha_nac ?? '';;
				$persona[$key]->DOD               = $datos_persona->fecha_defuncion ?? '';

				$emails = []; 
			 	$emails = SQLConnection::backendStoreProcedure('emails_', array($value->identificacion));
				$persona[$key]->email             = $emails; 

				$claes = [];
				$claes = SQLConnection::backendStoreProcedure('obtener_clae', array($value->identificacion));
			 	foreach ($claes as $keyd => $clae) {
						if($clae->principal == 1)
						{
							$persona[$key]->business_activity->code        = $clae->cod_clae ?? '';
							$persona[$key]->business_activity->description = $clae->descripcion ?? '';
							break;
						}
				}

				$domicilios = [];
			 	$domicilios = SQLConnection::backendStoreProcedure('sp_obtener_domicilios', array($value->identificacion));
			 	foreach ($domicilios as $keyd => $dom) {
						if(strpos($dom->tipo_domicilio, 'L') !== false)
						{
							$persona[$key]->legal_address->address  = $dom->domicilio ?? '';
							$persona[$key]->legal_address->state  	= $dom->prv_nombre ?? '';
							$persona[$key]->legal_address->city  	= $dom->loc_nombre ?? '';
							$persona[$key]->legal_address->country  = $dom->pai_nombre ?? '';
							$persona[$key]->legal_address->zip_code = $dom->codpos ?? '';
						}
						if(strpos($dom->tipo_domicilio, 'F') !== false)
						{
							$persona[$key]->fiscal_address->address  = $dom->domicilio ?? '';
							$persona[$key]->fiscal_address->state  	 = $dom->prv_nombre ?? '';
							$persona[$key]->fiscal_address->city  	 = $dom->loc_nombre ?? '';
							$persona[$key]->fiscal_address->country  = $dom->pai_nombre ?? '';
							$persona[$key]->fiscal_address->zip_code = $dom->codpos ?? '';
						}
				}
				// Si no hay domicilio legal tomamos el tipo D o E
				if (empty($persona[$key]->legal_address->address))
				{
					foreach ($domicilios as $keyd => $dom) {
						if((strpos($dom->tipo_domicilio, 'D') !== false || strpos($dom->tipo_domicilio, 'E') !== false) && ($dom->prv_nombre !== null || $dom->loc_nombre !== null))
						{
							$persona[$key]->legal_address->address  = $dom->domicilio ?? '';
							$persona[$key]->legal_address->state  	= $dom->prv_nombre ?? '';
							$persona[$key]->legal_address->city  	= $dom->loc_nombre ?? '';
							$persona[$key]->legal_address->country  = $dom->pai_nombre ?? '';
							$persona[$key]->legal_address->zip_code = $dom->codpos ?? '';
							break;
						}
					}
				}
				// Sigue vacio?, le pongo el O
				if (empty($persona[$key]->legal_address->address))
				{
					foreach ($domicilios as $keyd => $dom) {
						if((strpos($dom->tipo_domicilio, 'O') !== false) && ($dom->prv_nombre !== null || $dom->loc_nombre !== null))
						{
							$persona[$key]->legal_address->address  = $dom->domicilio ?? '';
							$persona[$key]->legal_address->state  	= $dom->prv_nombre ?? '';
							$persona[$key]->legal_address->city  	= $dom->loc_nombre ?? '';
							$persona[$key]->legal_address->country  = $dom->pai_nombre ?? '';
							$persona[$key]->legal_address->zip_code = $dom->codpos ?? '';
							break;
						}
					}
				}

				$persona[$key]->credit_score = $score->score ?? ''; 
 
				if ($key == 4) { break; } //Muestra maximo 5 registros
		}
		if (empty($persona))
		{
		return json_encode(['Parameters'=>$enviados,'Status'=>'100','Message'=>'NO DATA FOUND','Response'=>$persona]);
		}
		else 
		{
		return json_encode(['Parameters'=>$enviados,'Status'=>'200','Message'=>'OK','Response'=>$persona]);
		}
	}

	/**
	 * Api que devuelve datos de padron
	 * @access public
	 * 
	 * @return json
	 */
	public static function BusquedaPadron() {
		$data = [];
		$pais_busqueda = Request::input('pais_busqueda');
		$tax_id = (Request::input('identificacion') == '') ? null : Request::input('identificacion');
		$razon_social = (Request::input('razon_social') == '') ? null : Request::input('razon_social');
		$filtro_prov = Request::input('filtro_prov');

		if (!isset($_POST['pais_busqueda']) || !isset($_POST['identificacion']) || !isset($_POST['razon_social'])) {
			// Si no estan seteados alguno de los parámetros principales devuelve error
			return json_encode([
				'Status'=>'ERROR','StatusCode'=>0,'Message'=>'Faltan enviar parámetros','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>[]
			]);
		} else {
			// Si no está seteado pais_busqueda devuelve error
			if (empty($pais_busqueda)) {
				return json_encode([
					'Status'=>'ERROR','StatusCode'=>1,'Message'=>'Debe seleccionar el origen de la consulta (pais_busqueda)','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>[]
				]);
			}
			// Consulta ARGENINTA
			if ($pais_busqueda == 'AR') {
				$busqueda = !empty($tax_id) ? $tax_id : $razon_social;
				// $data = SQLConnection::busquedaPadronAutocomplete($busqueda);
				$data = SQLConnection::backendStoreProcedure('api_padrones',array($tax_id,$razon_social,$pais_busqueda,30)); // Consulta a la tabla padrones
				// Evalúa si se envió el cuit para consulta
				if (!empty($tax_id)) {
					// Si la consulta viene vacía busca por AFIP
					if (empty($data)) {
						$aux_posibles = [];
						// Si no es cuit busca posibles cuits e inserta en padrón para luego hacer una consulta
						if (!preg_match('/^[0-9]{11}$/',$tax_id)) {
							$posibles_cuits = SQLConnection::backendStoreProcedure('dni_buscar_cuit_posible',array($tax_id,'S'));
							// --
							if (!empty ($posibles_cuits)) {
								foreach ($posibles_cuits as $id) {
									$desdeAfip = json_decode(AFIPController::obtenerPadron($id->cuit));
									// --
									if (!(isset($desdeAfip->error) || isset($desdeAfip->errorConstancia))) {
										$doble_check = SQLConnection::backendStoreProcedure('api_padrones',array($desdeAfip->datosGenerales->idPersona,null,$pais_busqueda,30));
										if (empty($doble_check)) {											
											AFIPController::obtenerPadronSi($desdeAfip->datosGenerales->idPersona);
										}
										array_push($aux_posibles,SQLConnection::backendStoreProcedure('api_padrones',array($desdeAfip->datosGenerales->idPersona,null,$pais_busqueda,30))[0]);
									}
								}
							}
						} else {	
							// Si existe el cuit el Afip lo inserta en padrón, luego hace la busqueda.
							$padronAfip = json_decode(AFIPController::obtenerPadron($tax_id));
							if (!(isset($padronAfip->error) || isset($padronAfip->errorConstancia))) {
								$doble_check = SQLConnection::backendStoreProcedure('api_padrones',array($padronAfip->datosGenerales->idPersona,null,$pais_busqueda,30));
								if (empty($doble_check)) {											
									AFIPController::obtenerPadronSi($padronAfip->datosGenerales->idPersona);
								}
								array_push($aux_posibles,SQLConnection::backendStoreProcedure('api_padrones',array($padronAfip->datosGenerales->idPersona,null,$pais_busqueda,30))[0]);
							}
						}
						// Si la consulta a Afip devuelve algun error retorna con mensaje y parámetros enviados
						if (isset($padronAfip->error) || isset($padronAfip->errorConstancia) || empty($aux_posibles)) {						
							return json_encode([
								'Status'=>'ERROR','StatusCode'=>3,'Message'=>'Error en formato de identificación o cuit inexistente','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>[]
							]);
						} else {
							$data = $aux_posibles;
						} 
					} else {
						// Revisa si los registros de la búsqueda están desactualizados (30 días) para actualizar
						$flag_mod = 0;
						// ---
						foreach ($data as $reg) {
							$aux_date_now = date_create('now');
							$aux_date_reg = !is_null($reg->ismodified) ? date_create($reg->ismodified) : date_create('1900-01-01');
							$dif = date_diff($aux_date_now,$aux_date_reg);
							// ---
							//if ($dif->days > 45) {
								$afip = AFIPController::obtenerPadronSi($reg->identificacion);
								$flag_mod++;
							//}
						}
						if ($flag_mod != 0) {
							$data = SQLConnection::backendStoreProcedure('api_padrones',array($tax_id,null,$pais_busqueda,30));
						}
					}
				} else if (!empty($razon_social)) {
					// Si no envió cuit y envió un nombre entra acá	
					$flag_mod = 0;
					if (!empty($data)) {
						foreach ($data as $reg) {
							$aux_date_now = date_create('now');
							$aux_date_reg = !is_null($reg->ismodified) ? date_create($reg->ismodified) : date_create('1900-01-01');
							$dif = date_diff($aux_date_now,$aux_date_reg);
							// ---
							//if ($dif->days > 45) {
								AFIPController::obtenerPadronSi($reg->identificacion);
								$flag_mod++;
							//}
						}
						if ($flag_mod != 0) {
							$data = SQLConnection::backendStoreProcedure('api_padrones',array(NULL,$razon_social,$pais_busqueda,30));
						}
					}
				} else {
					// Si no envía ni cuit ni nombre devuelve error
					return json_encode([
						'Status'=>'ERROR','StatusCode'=>4,'Message'=>'Ningun parámetro de búsqueda enviado','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>[]
					]);
				}
				// Recorre el resultado para sacar los resultados que no son de origen argentino
				foreach ( $data as $k => $reg) {
					if ($reg->country_code != 'AR') {
						unset($data[$k]);
					}
				}

			} elseif ($pais_busqueda == 'OTRO') {
				if (empty($tax_id) && empty($razon_social)){					
					// Si no envía ni cuit ni nombre devuelve error
					return json_encode([
						'Status'=>'ERROR','StatusCode'=>4,'Message'=>'Ningun parámetro de búsqueda enviado','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>[]
					]);
				}
				$servicio = Request::input('servicio');
				$plataforma = Request::input('plataforma');
				//-----
				$expReg_cuit = '/^[A-Za-z0-9ñÑ ]+$/';
				$expReg_nombre = '/^[A-Za-zñÑ ]+$/';
				$expReg_nombre2 = '/^[\s]+$/';
				//---
				$cliente = Session::get('usuario')->cliente['client_id'];
				$pais = Request::input('pais') != '---' ? Request::input('pais') : '';
				$tipo_identificacion = empty(Request::input('tipo_identificacion')) ? '' : Request::input('tipo_identificacion');
				$tipo_persona = Request::input('tipo_persona') != '---' ? Request::input('tipo_persona') : '';
				$sexo = Request::input('sexo') != '---' ? Request::input('sexo') : '';				
				// Realiza una primera búsqueda y limpia la consulta para que no aparezcan registros de Argentina
				$aux_consulta = (!empty($tax_id)) ? $tax_id : $razon_social;
				$data = SQLConnection::backendStoreProcedure('api_padrones',array($tax_id,$razon_social,null,30));
				// $data = (!empty($aux_consulta)) ? SQLConnection::busquedaPadronAutocomplete($aux_consulta, true) : null;
				$match_result = 0;
				$fecha = Request::input('fecha');
				$nacionalidad = Request::input('nacionalidad');
				// Limpia el resultado de la búsqueda sacando a los de origen Argentino y de otro país (si está seleccionado)
				if (!empty($data)) {
					foreach ($data as $k => $reg) {
						if ($reg->country_code == 'AR' || (!empty($pais) && $pais !== 'OTRO' && $reg->country_code != $pais)) {
							unset($data[$k]);
						}
					}
				}
				// Evalúa si los datos enviados son correctos para insertar en el padrón de Fidelitas
				if (empty($tipo_identificacion) == false  and ($sexo == 'F' or $sexo == 'M') and ($tipo_persona == 'F' or $tipo_persona == 'J') and preg_match($expReg_cuit,$tax_id) and preg_match($expReg_nombre,$razon_social)) {					
					// Busca dentro del resultado de padrón si existe el registro para no duplicarlo
					if (!empty($data)) {
						foreach ($data as $reg) {
							if ($reg->nombre_persona == $razon_social && $reg->identificacion == $tax_id && $reg->country_code == $pais && $reg->abreviatura == $tipo_identificacion && $reg->tipo_persona == $tipo_persona) {
								$match_result ++;
							}
						}
					}
					// Si cumple con las condiciones (Que no exista el registro, que provenga del backend o que tenga el servicio IV) inserta en padrón
					if ($match_result == 0 && ($servicio == '10' || $plataforma == 'BACKEND')) {
						// dd('entre');
						$data[0] = trim($tipo_identificacion);
						$data[1] = trim($tax_id);
						$data[2] = trim($razon_social);
						$data[3] = trim($tipo_persona);
						$data[4] = trim($sexo);
						$data[5] = 1;
						$data[6] = 1;
						$data[7] = null;
						$data[8] = $fecha;
						$data[9] = $nacionalidad;
						$data[10] = $pais;
						// //-----
						// $respuesta = SQLConnection::backendStoreProcedure('backend_insertar_padron',$data); // COMENTADO HASTA QUE TODAS LAS PRUEBAS DEN OK
						$data = SQLConnection::backendStoreProcedure('api_padrones',array($tax_id,$razon_social,$pais,30));
					}
				}
			} else {
				// Si está mal seteado el pais_busqueda devuelve error
				return json_encode([
					'Status'=>'ERROR','StatusCode'=>2,'Message'=>'El valor de origen de consulta (pais_busqueda) enviado es invalido','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>$data
				]);
			}
			// Devuelve los resultados obtenidos
			if (!empty($data)) {
				// Filtro por provincia
				if (!empty($filtro_prov)) {
					foreach ($data as $k => $reg) {
						if ($reg->provincia != $filtro_prov) {
							unset($data[$k]);
						}
					}
				}
				// --
				return json_encode([
					'Status'=>'Ok','StatusCode'=>5,'Message'=>'Su consulta obtuvo resultados','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>$data
				]);
			} else {
				return json_encode([
					'Status'=>'Ok','StatusCode'=>6,'Message'=>'La consulta no obtuvo resultados','Parameters'=>['pais_busqueda'=>$pais_busqueda,'identificacion'=>$tax_id,'razon_social'=>$razon_social],'Response'=>[]
				]);
			}
		}
	}	

	// pasaje facturas a tango

	public static function pedidosFacturacionEnc() {
		$pedidos = [];
		$param = array();
		$pedidos = SQLConnection::backendStoreProcedure('fide_header_tango_procesar', $param,'selectAll'); 	
		return json_encode([
			'Response'=>$pedidos
		]);
	}
	public static function pedidosFacturacionDet() {
		$pedidos = [];
		$param = array();
		
		$pedidos = SQLConnection::backendStoreProcedure('fide_detail_tango_procesar', $param,'selectAll'); 	
		return json_encode([
			'Response'=>$pedidos
		]);
	}


	



}
