Librería TypeScript para generar datos de prueba realistas y localizados de Chile — determinística por seed.
Datoteca es un monorepo de librerías TypeScript para generar datos de prueba realistas y culturalmente correctos por país, empezando por Chile (@datoteca/cl). El nombre evita deliberadamente acoplarse a una región geográfica tipo "latam" — cada país es un paquete propio (@datoteca/cl, y en el futuro @datoteca/pe, @datoteca/ar, @datoteca/es...) sobre una base compartida (@datoteca/core).
¿Por qué existe? Porque generar datos de prueba "parecidos" a los reales no alcanza en dominios donde el formato importa — sobre todo en fintech y banca:
direccion.comuna() solo devuelve comunas reales, tomadas de la división político-administrativa oficial (SUBDERE).$45.000, UF 1.234,56, vía Intl.NumberFormat('es-CL').Y determinístico por seed: misma seed + mismo orden de llamadas → mismos resultados, para tests reproducibles.
¿Por qué no usar directamente @faker-js/faker y su locale es_CL? No es un reemplazo, es un complemento. Faker es excelente para datos genéricos multi-locale (nombres, lorem, internet, etc.), pero no baja al detalle de un dato específico de un país como el RUT chileno con su algoritmo de verificación, o un listado exhaustivo y real de comunas. Datoteca se enfoca en ese detalle local que un generador generalista no puede cubrir bien para todos los países a la vez.
La referencia completa de la API (clases, métodos y tipos de @datoteca/core y @datoteca/cl) está publicada en johansneirap.github.io/datoteca.
strict + noUncheckedIndexedAccess.d.ts por paquete@datoteca/cli>= 18pnpm@9.12.0 vía packageManager)npm install @datoteca/cl
o con pnpm:
pnpm add @datoteca/cl
@datoteca/core es una dependencia interna de @datoteca/cl (PRNG y helpers compartidos) y se instala automáticamente — no hace falta agregarlo a mano.
¿No querís escribir código? Usa el CLI directo con npx, sin instalar nada:
npx @datoteca/cli person --seed 42 --count 3
Instancia Datoteca con una seed. Sin estado global: la misma seed, en el mismo orden de llamadas, siempre produce el mismo resultado.
import { Datoteca } from '@datoteca/cl';
const dl = new Datoteca({ seed: 123 });
dl.rut(); // "12345678-9"
dl.persona.nombreCompleto(); // "María González Soto"
dl.direccion.direccionCompleta(); // "Los Aromos 482, Providencia"
dl.telefono.movil(); // "+56 9 1234 5678"
dl.dinero.clp(); // "$45.000"
RUT con distintas opciones de formato:
dl.rut(); // "12345678-9" (format: 'dash', default)
dl.rut({ format: 'dots' }); // "12.345.678-9"
dl.rut({ format: 'raw' }); // "123456789"
dl.rut({ dv: false }); // "12345678" (sin dígito verificador)
rut() en la raíz genera RUT de persona natural. Si necesitas distinguir explícitamente entre persona natural y empresa (el SII asigna RUT de personas jurídicas desde el 50.000.000), usa los generadores por namespace:
dl.persona.rut(); // "12345678-9" (rango persona natural: 1.000.000-25.000.000)
dl.empresa.rut(); // "76543210-K" (rango empresa: 50.000.000-99.999.999)
Ambos aceptan las mismas opciones (format, dv) que rut().
Dígito verificador de forma independiente (método estático, no requiere seed) y dinero con rango personalizado:
Datoteca.calcularDV(12345678); // "5"
dl.dinero.clp({ min: 10_000, max: 200_000 });
dl.dinero.uf(); // "UF 1.234,56"
dinero.clp()/dinero.uf() devuelven el string ya formateado; si necesitas operar el valor (sumar, comparar, etc.), usa la variante numérica:
dl.dinero.clpNumero(); // 45000 (number, sin formatear)
dl.dinero.ufNumero(); // 1234.56 (number, hasta 2 decimales)
Namespaces disponibles en el MVP: persona, direccion, telefono, dinero, banco, empresa, más rut() en la raíz por ser el dato más emblemático.
@datoteca/cli expone los mismos generadores desde la terminal — pensado para poblar fixtures rápido, generar CSV/JSON para QA, o usarlo desde stacks no-JS (Go, Python, etc.), sin escribir código:
npx @datoteca/cli rut --seed 42 --count 5
npx @datoteca/cli money --seed 42 --currency UF --min 10 --max 500 --format csv > fixtures.csv
Un subcomando por generador (rut, person, address, phone, money, company), formatos json/csv/ndjson, y la misma garantía de determinismo por seed. Ver el README de @datoteca/cli para la referencia completa de comandos y flags.
MVP v0.x — implementado
@datoteca/core: PRNG determinístico (mulberry32) + helpers (pickOne, pickWeighted, intBetween, arrayOf)rut() con formatos dash/dots/raw, dígito verificador módulo 11, y Datoteca.calcularDV() estático — más persona.rut()/empresa.rut() como generadores separados por rangopersona — nombre, apellido, nombre completodireccion — comuna (dataset real SUBDERE), calle, dirección completatelefono — móvil, fijodinero — CLP, UF (formateados en es-CL), más clpNumero()/ufNumero() para quien necesite operar los valoresbanco — nombre, cuentaempresa — razón social, giro@datoteca/cli (npx @datoteca/cli ...) — un subcomando por generador, formatos json/csv/ndjsonBacklog — fuera del MVP
@datoteca/pe, @datoteca/ar, @datoteca/es, ...)Las contribuciones son bienvenidas.
git checkout -b feat/mi-generador)git commit -m 'feat(cl): agrega generador de X')pnpm build, pnpm test, pnpm lint, pnpm typecheckgit push origin feat/mi-generador)Prefijos usados en este repo: feat, fix, chore, docs, ci, build, test, con scope entre paréntesis (core, cl) cuando el cambio es específico de un paquete.
Distribuido bajo la licencia MIT. Ver LICENSE para más información.
@johansneirap — johansneirap@gmail.com