""" Utilidades de seguridad para logs — CrowData. Enmascara datos sensibles (CUIT, DNI, email) en logs. """ import re def mask_cuit(cuit: str) -> str: """ Enmascara un CUIT mostrando solo los últimos 4 dígitos. Ejemplo: 20-29681148-4 → ******1484 """ if not cuit or len(cuit) < 6: return "******" clean = cuit.replace("-", "").replace(" ", "") return "*" * (len(clean) - 4) + clean[-4:] def mask_dni(dni: str) -> str: """ Enmascara un DNI mostrando solo los últimos 3 dígitos. Ejemplo: 12345678 → ****5678 """ if not dni or len(dni) < 4: return "****" clean = dni.replace(".", "").replace(" ", "") return "*" * (len(clean) - 3) + clean[-3:] def mask_email(email: str) -> str: """ Enmascara un email mostrando solo la primera letra y dominio. Ejemplo: lucas@crowdata.ar → l*****@crowdata.ar """ if not email or "@" not in email: return "***" local, domain = email.split("@", 1) if len(local) <= 1: return f"*@{domain}" return f"{local[0]}{'*' * (len(local) - 1)}@{domain}"