# Contrato de datos

> Una promesa escrita y verificable sobre la forma y la calidad de datos que se comparten.

- Nivel: Avanzado
- Temas: Datos
- URL: https://tidbit.legios.com.ar/es/data-contract/
- En inglés: [Data contract](https://tidbit.legios.com.ar/data-contract/)

Un **contrato de datos** (data contract) es un acuerdo entre el equipo que produce ciertos datos (por ejemplo, los desarrolladores de la app de checkout) y los equipos que los consumen (analistas, finanzas, un modelo de machine learning). Deja por escrito cómo van a ser esos datos: qué campos hay, de qué tipo, cuáles pueden venir vacíos, qué valores se permiten, qué tan frescos van a estar y a quién llamar si algo sale mal. Y lo importante: se escribe como un archivo de código, casi siempre YAML, para que una máquina lo pueda verificar.

Existe por un accidente muy común. Alguien de la app le cambia el nombre a `customer_id` por `client_id`, o pasa los precios de pesos a centavos, un cambio totalmente razonable para la app, y a la mañana siguiente todos los tableros de facturación están rotos. Nadie hizo nada mal; el que producía los datos simplemente no sabía quién dependía de esa tabla. El contrato vuelve explícita esa dependencia, y un control automático en el CI/CD puede frenar el cambio, o al menos avisar, antes de que salga.

Los contratos suelen versionarse como las APIs: los cambios compatibles pasan, los que rompen algo necesitan una versión nueva y un período de migración. Son una idea central del data mesh, donde cada equipo de dominio es dueño de sus datos y los publica como un producto. Hay especificaciones abiertas, como el Open Data Contract Standard, y herramientas que los validan. Lo difícil no es tanto el archivo como el hábito: quien produce datos tiene que tratarlos como algo de lo que otros dependen.

## Una analogía

El acuerdo entre una panadería y el café al que le entrega: tantas medialunas, de este tamaño, antes de las 7 todos los días. Si la panadería quiere cambiar la receta, le avisa al café antes en lugar de sorprenderlo con baguettes.

## Para quedarse

- Deja por escrito campos, tipos, valores permitidos, frescura y responsable de un conjunto de datos.
- Está escrito como código, así los controles automáticos detectan cambios que rompen antes de salir.
- Pone la responsabilidad por la calidad del lado del equipo que produce los datos.
- Es una pieza central del data mesh y de tratar los datos como un producto.

## Para seguir leyendo

- [Data contract en Wikipedia (en inglés)](https://en.wikipedia.org/wiki/Data_contract)
- [Open Data Contract Standard (Bitol, en inglés)](https://bitol-io.github.io/open-data-contract-standard/)

## Términos relacionados

- [Machine learning](https://tidbit.legios.com.ar/es/machine-learning/): Enseñarle a una computadora con ejemplos en lugar de escribirle cada regla.
- [CI/CD](https://tidbit.legios.com.ar/es/ci-cd/): Automatización que construye, prueba y publica cada cambio, para que lanzar sea rutina.
- [API](https://tidbit.legios.com.ar/es/api/): El menú de cosas que un programa le deja pedir a otro programa.
- [Data mesh](https://tidbit.legios.com.ar/es/data-mesh/): Una forma de organizarse en la que cada equipo del negocio es dueño de sus propios datos.
- [Datos abiertos](https://tidbit.legios.com.ar/es/open-data/): Datos que cualquiera puede bajar, usar y compartir libremente, para lo que sea.
