import requests import logging from typing import Optional, Dict, Any, Tuple def validar_nif( nif: str, nombre: str, *, timeout: int = 10, api_key: Optional[str] = None, bearer_token: Optional[str] = None, ) -> Tuple[bool, Optional[Dict[str, Any]], Optional[str]]: """ Llama al endpoint de Verifacti para validar un NIF. Retorna: (ok, data, error) - ok: True si la llamada fue exitosa y resultado == 'IDENTIFICADO' - data: dict con la respuesta JSON completa - error: mensaje de error si algo falló """ url = "https://api.verifacti.com/nifs/validar" headers = {"Content-Type": "application/json", "Accept": "application/json"} if api_key: headers["X-API-KEY"] = api_key if bearer_token: headers["Authorization"] = f"Bearer {bearer_token}" payload = { "nif": nif, "nombre": nombre, } try: resp = requests.post( url, json=payload, headers=headers, timeout=timeout) if resp.status_code != 200: return False, None, f"HTTP {resp.status_code}: {resp.text}" data = resp.json() resultado = data.get("resultado") # La lógica de validación: 'IDENTIFICADO' = válido ok = resultado == "IDENTIFICADO" return ok, data, None except requests.RequestException as e: logging.error("Error de conexión con la API Verifacti: %s", e) return False, None, str(e) except ValueError as e: logging.error("Respuesta no es JSON válido: %s", e) return False, None, "Respuesta no es JSON válido"