# Validator — Funciones que verifican datos o configuracion contra reglas Tag: `validator`. Grupo de funciones que **verifican** un dato/config/spec contra una regla y devuelven resultado de validacion (bool / lista de errores / metricas de calidad). NO transforman ni mueven datos — solo dictaminan. Filtro MCP: `mcp__registry__fn_search query="" tag="validator"`. ## Funciones del grupo | ID | Lang | Que valida | |---|---|---| | [config_validate_go_infra](../../functions/infra/config_validate.md) | go | Estructura de config (campos requeridos, tipos) | | [file_validate_type_go_infra](../../functions/infra/file_validate_type.md) | go | Tipo MIME / extension de archivo | | [dag_validate_go_core](../../functions/core/dag_validate.md) | go | DAG topologia (ciclos, deps, schedule) | | [detect_outliers_py_datascience](../../python/functions/datascience/detect_outliers.md) | py | Outliers numericos (z-score / IQR) | | [detect_outliers_go_datascience](../../functions/datascience/detect_outliers.md) | go | Outliers numericos | | [detect_drift_py_datascience](../../python/functions/datascience/detect_drift.md) | py | Drift de distribucion vs baseline | ## Ejemplo canonico Validar dataset antes de cargarlo a sink productivo. ```python from datascience import detect_outliers, detect_drift # 1. Detectar outliers en columna critica outliers = detect_outliers(df, column="amount", method="zscore", threshold=3.0) if len(outliers) > len(df) * 0.05: raise ValueError(f"too many outliers: {len(outliers)} / {len(df)}") # 2. Comparar contra distribucion historica drift_report = detect_drift(df_current=df, df_baseline=df_yesterday, column="amount") if drift_report["ks_pvalue"] < 0.01: print(f"WARNING: distribution drift detected (KS p={drift_report['ks_pvalue']:.4f})") ``` ## Fronteras del grupo NO cubre: - **Audits** del registry mismo (capability groups, copied code, etc.) -> tag `doctor`. - **Tests** unitarios (estan en `*_test.go`/`pytest`, no son funciones del registry). - **Assertions** de runtime de apps (entan en `operations.db.assertions`). - Validacion de codigo (lint, formato) — fuera del registry. ## Cuando NO usar `validator` - Si la funcion transforma datos para HACERLOS validos (ej. clip outliers) -> es transformer. - Si la funcion solo lee y reporta status sin verificar regla -> es extractor. ## Relacion con el bucle reactivo Validators encajan en **Fase 4 ANALIZAR** del bucle reactivo (`fn_operations`). Una assertion definida en `operations.db.assertions` puede usar una funcion validator del registry como predicado. ## Consumidores - `data_factory` — futura tab Validators (no v1; v1 solo extractor/transformer/sink/database). - DAGs de auditoria (ej. `weekly-deep-scan.yaml` invoca audits del grupo `doctor`). - Pipelines ML que validan datos antes de entrenar (defer v2). - Pre-flight de sinks: ejecutar validator antes de escribir a destino productivo. ## Notas - Casi todos los validators son **puros** o casi-puros (solo dependen del input). - Grupo pequeño (6 funcs) — crecera cuando el registry incorpore validators de schema (JSON Schema, Pandera, etc.). - DAG step `function: ` con `continue_on.failure: false` actua como gate en un pipeline.