---
id: 0018
title: Transforms automatizadas tipo Maltego con browser headless
status: pending
priority: low
created: 2026-05-01
depends_on: [0012]
---

## Objetivo

Dada una entidad seleccionada, ejecutar un script (Playwright/Puppeteer)
que enriquece el grafo con datos derivados — equivalente a las
"transforms" de Maltego. Es la pieza que diferencia frente a alternativas
mas estaticas.

## Ejemplos para banking/OSINT espanol

- Persona/empresa -> consulta BORME, registro mercantil, axesor.
- Dominio -> whois, DNS records, certificados (crt.sh).
- Email -> haveibeenpwned, hunter.io.
- Telefono -> truecaller-like.
- Empresa -> LinkedIn search publico, opencorporates.

## Alcance

- Cada transform es un pipeline del registry con tag `transform` y un
  contrato fijo: input = `{id, type, metadata}`, output = `{entities,
  relations}`.
- Registro de transforms aplicables por entity_type.
- UI: context menu sobre nodo -> "Run transform..." -> lista filtrada
  por type aplicable -> ejecuta async -> notifica al terminar -> preview
  antes de commit.
- Sandbox: cada transform en proceso aparte, timeout configurable.

## Riesgos y mitigaciones

- Los scrapers se rompen cuando los sitios cambian -> mantener una suite
  de "transform health checks" automaticos (cron ligero) que avisa de
  fallos antes de que el usuario los descubra en vivo.
- Cumplimiento legal y robots.txt -> documentar en cada transform su
  fuente, politica y ToS.
- Rate limiting -> cooldown por host configurable.

## Definicion de hecho

- Selecciono un dominio en el grafo, lanzo "whois", aparecen registrant,
  registrar y nameservers como nodos vinculados con relaciones tipadas.
- Un transform que falla loguea el error y no afecta a otros que
  esten corriendo en paralelo.
- La lista de transforms aplicables a una entidad se computa segun su
  type (no se ofrecen los inaplicables).
- Health check cron escribe a `proposals` cuando un transform empieza a
  fallar repetidamente.
