<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Http\Controllers\MainController;
use App\Http\Controllers\AFIPController;
use App\Custom\Misc;
use Request;
use Session;
use stdClass;
use DateTime;
use DB;
use LynX39\LaraPdfMerger\PdfManage;

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);
		}
	} 
  }

/**
	 * 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;
		//SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$cuit,$producto,$p_ip),'selectOne');
		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;

//		SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$dni,71,$p_ip),'selectOne');

		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');
		
		$result = [];
		/*
		0 => {#592
    +"nombre_persona": "TURCHETTO LEONEL ALBERTO"
    +"fecha_nacimiento": "1988-04-19"
    +"fecha_defuncion": null
    +"identificacion": "20335754655"
  }*/ 
		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); 

		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'=>[]
				]);
			}
		}


		$taxid_dni = $tax_id ?? $dni;
		
		$producto       = $usuario->producto ?? 71;
		//$p_ip = $_SERVER['REMOTE_ADDR'];
		//$resp = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$taxid_dni,producto,$p_ip),'selectOne');
		
		//si taxid o dni son opcionales entonces el consumo de servicio debe hacerse al final cuando tengamos el dato

		//$resp = self::consumir_servicio($taxid_dni,$producto);

		/*if($nombre == '' || $fecha_nacimiento == '' || ($dni == '' && $tax_id == '')){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'All fields are required','Response'=>[]
			]);
		}*/
		
		if(strlen($tax_id) == 11){
			AFIPController::obtenerPadron($tax_id,true,'AR',false);
		}
		/* 01/10/2020 */
		elseif (!empty($taxid_dni) && strlen($taxid_dni) <= 8) 
		{ 
			self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
		}

		$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id,$name,$surname,$birthdate),'select');	
		$result = [];
		$cuit = [];
		$encontrados = 0; 
		foreach($datos as $key => $persona){
		//var_dump($persona->cuit); die(); 
			$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);
			/* 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']);

			$address_contains = explode(' ',$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 	= $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; 
				}/*else{
					$telephone_validation = 'FALSE';
				}*/
			}

			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		= $birthdate_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		= $telephone_validation;
			$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 == 'TRUE') { $valores += 100;} elseif ($value->birthdate == 'PARTIALLY TRUE') { $valores += 50;}
				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
				//$integridad = 4;
				$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->birthdate == 'TRUE') { $cant_iguales += 1; $valores += 100;} elseif ($value->birthdate == 'PARTIALLY TRUE') {$cant_iguales += 1; $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; 
				/*
				if ($cant_iguales > $mas_iguales) 
				{
					$mas_iguales = $cant_iguales; 
					$mas_iguales_key = $key2; 
				}
				*/
			}
/* 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; 
				}
			}
/* lo sacamos por lo que agregamos arriba
			$resultado[0] = $result[$mas_iguales_key]; 
			$cuit_consultado = $cuit[$mas_iguales_key];
*/
		}
/* 02/07/2021: Cambiamos qu guarde un consumo por cada cuit que le devolvemos  
		$resp = self::consumir_servicio($cuit_consultado,$producto);
		$resultado[0]->transaction_id 	= $resp->transaction_id ?? 0;
*/
		//-> 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'=>[]
				]);
			}
		}


		$taxid_dni = $tax_id ?? $dni;
		
		$producto       = $usuario->producto ?? 71;
		//$p_ip = $_SERVER['REMOTE_ADDR'];
		//$resp = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$taxid_dni,producto,$p_ip),'selectOne');
		
		//si taxid o dni son opcionales entonces el consumo de servicio debe hacerse al final cuando tengamos el dato

		//$resp = self::consumir_servicio($taxid_dni,$producto);

		/*if($nombre == '' || $fecha_nacimiento == '' || ($dni == '' && $tax_id == '')){
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'ERROR','Message'=>'All fields are required','Response'=>[]
			]);
		}*/
		
		if(strlen($tax_id) == 11){
			AFIPController::obtenerPadron($tax_id,true,'AR',false);
		}
		/* 01/10/2020 */
		elseif (!empty($taxid_dni) && strlen($taxid_dni) <= 8) 
		{ 
			self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
		}

		$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id,$name,$surname,$birthdate),'select');	
		$result = [];
		$cuit = [];
		$encontrados = 0; 
		foreach($datos as $key => $persona){
		//var_dump($persona->cuit); die(); 
			$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);
			/* 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']);

			$address_contains = explode(' ',$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 	= $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; 
				}/*else{
					$telephone_validation = 'FALSE';
				}*/
			}

			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		= $birthdate_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		= $telephone_validation;
			$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 == 'TRUE') { $valores += 100;} elseif ($value->birthdate == 'PARTIALLY TRUE') { $valores += 50;}
				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
				//$integridad = 4;
				$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 == 'TRUE') { $cant_iguales += 1; $valores += 100;} elseif ($value->birthdate == 'PARTIALLY TRUE') {$cant_iguales += 1; $valores += 50;}
				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; 
				/*
				if ($cant_iguales > $mas_iguales) 
				{
					$mas_iguales = $cant_iguales; 
					$mas_iguales_key = $key2; 
				}
				*/
			}
/* 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; 
				}
			}
/* lo sacamos por lo que agregamos arriba
			$resultado[0] = $result[$mas_iguales_key]; 
			$cuit_consultado = $cuit[$mas_iguales_key];
*/
		}
/* 02/07/2021: Cambiamos qu guarde un consumo por cada cuit que le devolvemos  
		$resp = self::consumir_servicio($cuit_consultado,$producto);
		$resultado[0]->transaction_id 	= $resp->transaction_id ?? 0;
*/
		//-> 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
		]);

	}
	

	
	/*
	valida datos personales.
	devuelve @json (Parameters,Status,Message,Response)
	*/
	public static function validacionGBG(){
		$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'));

		$enviados['name'] 		= $name;
		$enviados['surname'] 	= $surname;
		$enviados['dni'] 		= $dni;
		$enviados['tax_id'] 	= $tax_id;
		$enviados['birthdate'] 	= $birthdate;
		$enviados['address'] 	= $address;
		$enviados['telephone'] 	= $telephone;
		$enviados['gender'] 	= $gender;


		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'=>[]
				]);
		}

		$taxid_dni = $tax_id ?? $dni;
		
		$producto       = $usuario->producto ?? 71;
		//$p_ip = $_SERVER['REMOTE_ADDR'];
		//$resp = SQLConnection::backendStoreProcedure('consumir_servicio_API',array($user_id,$taxid_dni,producto,$p_ip),'selectOne');
		$resp = self::consumir_servicio($taxid_dni,$producto);

		/*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);
		}
		/* 01/10/2020 */
		elseif (!empty($taxid_dni) && strlen($taxid_dni) <= 8) 
		{ 
			self::BuscarCuit($taxid_dni,'S');  /* Busca CUITs para el dni solicitado, y los pasa por AFIP */ 
		}

		//$datos = SQLConnection::backendStoreProcedure('validar_gbg',array($dni,$tax_id),'select');	
		$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($dni,$tax_id),'select');	
		$result = [];
		foreach($datos as $key => $persona){
			$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']);
			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;
					}
				}
			/*
			array:4 [
				0 => "superi 1405 5 B"
				1 => "CIUDAD AUTONOMA DE BUENOS AIRES"
				2 => "CAPITAL FEDERAL"
				3 => "ARGENTINA"
			]
			*/ 

				$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';
					}
				}
			}
			$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';
			$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';
			}
			$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  	    = $info->domicilio;
			$result[2]->state 			= $info->provicia;
			$result[2]->city 			= $info->localidad;
			$result[2]->zip 			= $info->codpos;
		}
		return json_encode([
			'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$result
		]);

	}
	
 	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);


//echo var_dump($cuit,$nombre,$nombre_contains, $maxregistros,$provincia);

//dd();



		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 ObtenerInformeComercialCompleto($cuit='',$apikey=''){


		//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);
		}

		$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);
		}
		//dd($configuracion);

		//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;
			$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;
		  }
		  $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 ;
		}

		$persona->balances = [];
		$persona->balances  = 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){
		  $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++;
		  }
		}


		//Información Comercial.
		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;
		}

		//Información Fiscal.
		if($configuracion->contables == true){
		  $MainController = new MainController();
		 // dd($MainController->obtenerContables(true,'','','','','','','','','','',$cuit));
		 // $contables      = json_decode($MainController->obtenerContables(true,'','','','','','','','','','',$cuit)->getContent())->info;
		 // dd($contables);
		}

		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
		//if($configuracion->bancos == 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 = $respuesta->score;
		if($configuracion->score_ic  == true){
		  $persona->score = new stdClass();
		  $persona->score->valor = $score;
		}
		$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;
		  
		}
		$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;
		  
		}
		 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();
   }

  //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::obtenerBriefHTML(false);
	$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_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;
  }

  /*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, 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 = []; 
	/*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($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>";
	  $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>',$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); 
		  AFIPController::obtenerPadron($value->cuit_buscado,false,'AR',false);

		  $afip = SQLConnection::backendStoreProcedure('api_info_afip_cuit',array($value->cuit_buscado),true);
		  $respuesta->fidelitas_response[$key]['afip'] = new stdClass(); 
		  $respuesta->fidelitas_response[$key]['afip'] = $afip;

		  $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);
	}else if($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 obtenerBuscador(){
	$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 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'];
	
	$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) {
			//	dd($domicilios);
				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) {
		//	dd($domicilios);
			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;
			  }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));
	  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");
	  
	}
	if($demeritador->endeudamiento_corriente != 0){
	  $endeudamiento_corriente += (($porcentaje_contable / 100) * 16.2/100 * ($demeritador->endeudamiento_corriente*10));
	  array_push($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");
	  
	}
  
	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");
	  
	}
	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");
	  
	}
	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");
	  
	}
	$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);
	$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      = '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;


			/* 06/05/2021 Se quiere entrar por nombre y fecha nacimiento, asi q sacamos esta validacion 
			/*if((empty($entrada->tax_id)  && empty($entrada->dni)) ||
			  (!empty($entrada->tax_id) && !is_numeric($entrada->tax_id)) ||
			  (!empty($entrada->dni)    && !is_numeric($entrada->dni)) )
			  { 
			  	$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');	
			  	continue; }*/
			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);
				}
				/*
				var_dump($entrada->dni);
				var_dump($entrada->surname);
				var_dump($entrada->name);
				var_dump($nombre);
				var_dump($nombre_contains); die(); */
				$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;
			//dd($taxid_dni); 
			if(strlen($taxid_dni) == 11){
				AFIPController::obtenerPadron($taxid_dni,true,'AR',false);
			}

			//$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array($entrada->dni,$entrada->tax_id,$enviados['name'],$enviados['surname'],$entrada->birthdate),'select');	
			/* 06/05/2021: que busque por nombre y fecha nac. */
			/*var_dump($entrada->name);
			var_dump($entrada->surname);
			var_dump($entrada->birthdate);  */ 
			$datos = SQLConnection::backendStoreProcedure('validar_gbg_nombre',array('','',$enviados['name'],$enviados['surname'],$entrada->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);
				//var_dump($nombres); 
				$surname_validation = self::validacionApellido($enviados, $persona);
				//var_dump($apellidos); die(); 
				$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';
				//$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		= $birthdate_validation;
				$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]->city			    = $city_validation;
				$result[$key]->state			= $state_validation;
				$result[$key]->cp			    = $cp_validation;
				$result[$key]->email			= $email_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		= $telephone_validation;
				//$result[$key]->last_name		= $apellidos ?? '';
				//$result[$key]->first_name		= $nombres ?? '';
				//$result[$key]->transaction_id 	= $resp->transaction_id ?? 0;
				$result[$key]->ID 		        = $entrada->ID;
				
				//$cuit[$key] = $persona->cuit; 

			}
 

			$resultado = []; 
			// Si hay muchos, elige el que tiene mas campos TRUE o PARTIALLY TRUE 
			if ($encontrados <= 1 )
			{
				$resultado = $result; 
//				$cuit_consultado = $cuit[0];
			}
			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]; 
				//$cuit_consultado = $cuit[$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');	
			//var_dump($salida); die();  
			/*
			$resp = self::consumir_servicio($cuit_consultado,$producto);
			$resultado[0]->transaction_id 	= $resp->transaction_id ?? 0;
			return json_encode([
				'Parameters'=>$enviados,'Status'=>'OK','Message'=>'OK','Response'=>$resultado
			]);
			*/
		}
	}


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
		]);

	}

}
