Spaces:
Running
Running
Download datos/index.html from clyxconsultingdev/amc-console: direct link, hf CLI and curl.
- Browser
- Download file 13.8 kB
-
https://huggingface.co/spaces/clyxconsultingdev/amc-console/resolve/main/datos/index.html
- Command line
-
hf download hf://spaces/clyxconsultingdev/amc-console/datos/index.html
-
curl -L -o index.html https://huggingface.co/spaces/clyxconsultingdev/amc-console/resolve/main/datos/index.html
13.8 kB
| <html lang="es" data-root="../"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Datos y acceso para IA · AMC</title> | |
| <meta name="description" content="Cómo consultar los datos abiertos de Analíticas Mercantiles Colombianas desde un programa o un asistente de IA: la API de Hugging Face, SQL con DuckDB, cada tabla y sus columnas, y las advertencias para leer bien las cifras."> | |
| <meta property="og:title" content="Datos y acceso para IA · AMC"> | |
| <meta property="og:description" content="El registro mercantil de Colombia, depurado y abierto: cómo consultarlo desde un programa o un asistente de IA."> | |
| <meta property="og:type" content="article"> | |
| <link rel="icon" href="../assets/favicon.svg" type="image/svg+xml"> | |
| <meta property="og:image" content="https://amc.clyxconsulting.com/assets/og/inicio.png"> | |
| <meta property="og:image:width" content="1200"> | |
| <meta property="og:image:height" content="630"> | |
| <meta property="og:site_name" content="Analíticas Mercantiles Colombianas"> | |
| <meta name="twitter:card" content="summary_large_image"> | |
| <meta name="twitter:image" content="https://amc.clyxconsulting.com/assets/og/inicio.png"> | |
| <link rel="alternate" type="text/plain" href="../llms.txt" title="Guía para modelos de lenguaje"> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> | |
| <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Inter+Tight:wght@600;700;800&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet"> | |
| <link rel="stylesheet" href="../assets/amc.css"> | |
| <link rel="stylesheet" href="../assets/nav.css"> | |
| <!-- The dataset, described for Google Dataset Search and for the crawlers | |
| behind assistants (schema.org Dataset). No figures: the live ones are in | |
| the manifest, which this page reads. --> | |
| <script type="application/ld+json"> | |
| { | |
| "@context": "https://schema.org", | |
| "@type": "Dataset", | |
| "name": "Analíticas Mercantiles Colombianas (AMC): el registro mercantil de Colombia, depurado", | |
| "alternateName": ["AMC", "RUES depurado"], | |
| "description": "Cada empresa del registro mercantil de Colombia (RUES), con sus matrículas reunidas en una sola empresa, si sigue viva (renovó este año), su actividad CIIU, su cámara de comercio y su historia; con estados financieros (Supersociedades, Superfinanciera, Supersolidaria), contratos con el Estado (SECOP I y II), turismo y cifras del DANE. Las personas naturales se cuentan, nunca se nombran.", | |
| "url": "https://amc.clyxconsulting.com/datos/", | |
| "sameAs": "https://huggingface.co/datasets/clyxconsultingdev/amc-rues", | |
| "license": "https://creativecommons.org/licenses/by-sa/4.0/", | |
| "isAccessibleForFree": true, | |
| "inLanguage": "es", | |
| "keywords": ["Colombia", "empresas", "registro mercantil", "RUES", "cámaras de comercio", "CIIU", "datos abiertos", "business registry"], | |
| "spatialCoverage": { "@type": "Place", "name": "Colombia" }, | |
| "creator": { "@type": "Organization", "name": "Clyx Consulting", "url": "https://clyxconsulting.com/" }, | |
| "isBasedOn": "https://www.datos.gov.co/d/c82u-588k", | |
| "distribution": [ | |
| { "@type": "DataDownload", "name": "manifest.json: tablas, filas, sha256 y notas de columnas", "encodingFormat": "application/json", | |
| "contentUrl": "https://huggingface.co/datasets/clyxconsultingdev/amc-rues/resolve/main/manifest.json" }, | |
| { "@type": "DataDownload", "name": "companies", "encodingFormat": "application/vnd.apache.parquet", | |
| "contentUrl": "https://huggingface.co/datasets/clyxconsultingdev/amc-rues/resolve/main/data/companies.parquet" } | |
| ] | |
| } | |
| </script> | |
| <style> | |
| .datos pre { margin: 0 0 1.05em; background: var(--surface-2); border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px; | |
| font: 13px/1.6 var(--mono); color: var(--ink); overflow: auto; white-space: pre; } | |
| .datos code { font: .88em var(--mono); overflow-wrap: anywhere; } | |
| .datos pre code { font-size: 1em; overflow-wrap: normal; } | |
| .datos ol li, .datos ul li { margin: 0 0 .5em; } | |
| .tables details { border-top: 1px solid var(--border); padding: 10px 0; } | |
| .tables summary { cursor: pointer; display: flex; justify-content: space-between; gap: 12px; align-items: baseline; } | |
| .tables summary b { font: 600 15px var(--mono); color: var(--ink); } | |
| .tables summary span { color: var(--muted); font-size: 14px; white-space: nowrap; } | |
| .tables dl { margin: 10px 0 4px; display: grid; grid-template-columns: minmax(0, 14em) minmax(0, 1fr); gap: 6px 14px; font-size: 15px; line-height: 1.5; } | |
| .tables dt { font: 500 13px/1.6 var(--mono); color: var(--ink); overflow-wrap: anywhere; } | |
| .tables dd { margin: 0; color: var(--ink-2); } | |
| @media (max-width: 560px) { .tables dl { grid-template-columns: minmax(0, 1fr); gap: 2px; } .tables dd { margin-bottom: 8px; } } | |
| </style> | |
| <link rel="canonical" href="https://amc.clyxconsulting.com/datos/"> | |
| <meta property="og:url" content="https://amc.clyxconsulting.com/datos/"> | |
| <meta property="og:locale" content="es_CO"> | |
| <meta property="og:image:type" content="image/png"> | |
| <meta property="og:image:alt" content="Datos y acceso para IA · AMC"> | |
| </head> | |
| <body> | |
| <main class="wrap" id="app"><p class="loading">Cargando…</p></main> | |
| <noscript><p class="wrap">Esta página necesita JavaScript para listar las tablas. La guía en texto está en <a href="../llms.txt">llms.txt</a>.</p></noscript> | |
| <script type="module"> | |
| import * as A from "../assets/amc.js"; | |
| const { el, rich } = A; | |
| A.chrome("datos"); | |
| const app = document.getElementById("app"); | |
| // FOR PROGRAMS AND ASSISTANTS (docs/ai-access-plan.md, step 1). The same | |
| // ground as ../llms.txt, for people: where the files are, how to query them | |
| // without downloading (Hugging Face's API, DuckDB), every table with the note | |
| // the manifest carries for each column, and the caveats without which the | |
| // figures read wrong. The methodology keeps the downloads and the citation; | |
| // this page links there rather than repeat them. No figure is typed here. | |
| const HF = A.HF, DS = "clyxconsultingdev/amc-rues", API = "https://datasets-server.huggingface.co"; | |
| const code = (t) => el("code", { text: t }); | |
| const pre = (t) => el("pre", { tabindex: "0" }, el("code", { text: t })); | |
| const size = (b) => b < 1e6 ? `${A.n(Math.max(1, b / 1e3))} KB` : `${(b / 1e6).toLocaleString("es-CO", { maximumFractionDigits: 1 })} MB`; | |
| const ext = (text, href) => el("a", { href, rel: "noopener", text }); | |
| // prose(), as amc.js has it, and elements too (code blocks, lists); a null is skipped. | |
| const prose = (...blocks) => el("div", { class: "prose reveal" }, ...blocks.filter((b) => b != null).map((b) => | |
| b instanceof Node ? b : b.h2 ? el("h2", { text: b.h2 }) : Array.isArray(b) ? rich("p", {}, b) : el("p", { text: b }))); | |
| // The manifest's notes are written with `code` and **bold**: those two, as elements; nothing parsed as HTML. | |
| const md = (s) => String(s).split(/(`[^`]+`|\*\*[^*]+\*\*)/).filter(Boolean) | |
| .map((p) => p.startsWith("`") ? code(p.slice(1, -1)) : p.startsWith("**") ? { b: p.slice(2, -2) } : p); | |
| try { | |
| const [m, s] = await Promise.all([A.getJSON("manifest.json"), A.summary()]); | |
| const corte = m.snapshot?.logical_date; | |
| const filter = `${API}/filter?dataset=${DS}&config=name_directory&split=train&where=${encodeURIComponent(`"nit"='860025900'`)}&length=5`; | |
| const search = `${API}/search?dataset=${DS}&config=name_directory&split=train&query=alpina&length=5`; | |
| const rows = `${API}/rows?dataset=${DS}&config=activities&split=train&offset=0&length=10`; | |
| const tables = el("div", { class: "tables" }, ...Object.entries(m.files).map(([file, meta]) => { | |
| const name = file.replace(/\.parquet$/, ""); | |
| const cols = m.columns?.[name] || {}; | |
| return el("details", { id: `t-${name}` }, | |
| el("summary", {}, el("b", { text: name }), el("span", { text: `${A.n(meta.rows)} filas · ${size(meta.bytes)}` })), | |
| el("dl", {}, ...Object.entries(cols).flatMap(([c, note]) => [el("dt", { text: c }), rich("dd", {}, md(note))])), | |
| el("p", { class: "muted" }, ext(`${HF}/resolve/main/data/${file}`, `${HF}/resolve/main/data/${file}`))); | |
| })); | |
| app.replaceChildren( | |
| el("header", { class: "story-head" }, | |
| el("p", { class: "kicker", text: "Datos abiertos" }), | |
| el("h1", { text: "Datos y acceso para IA" }), | |
| el("p", { class: "dek", text: "Cómo consultar el registro depurado desde un programa o un asistente de IA, sin descargar nada, y lo que hay que saber para leer bien sus cifras." })), | |
| el("div", { class: "datos" }, prose( | |
| ["Todo lo que muestra este sitio sale de tablas abiertas, en ", { b: "Parquet" }, ", publicadas en ", ext("Hugging Face", HF), | |
| " bajo licencia CC BY-SA 4.0. Esta página explica cómo consultarlas desde código o desde un asistente; para descargarlas o abrirlas en Excel, Power BI, Python o R, paso a paso, ve a ", | |
| { a: "Cómo abrir los datos", href: "abrir/index.html" }, "."], | |
| corte ? ["La edición actual tiene corte del ", { b: A.date(corte) }, ". Cada tabla, sus filas y la nota de cada columna salen de su ", | |
| ext("manifest.json", `${HF}/resolve/main/manifest.json`), ", que se lee primero."] : null, | |
| { h2: "Para asistentes de IA" }, | |
| ["Los asistentes y los programas que respondan preguntas con estos datos tienen una guía en texto, ", el("a", { href: "../llms.txt" }, code("llms.txt")), | |
| ", con las tablas, las consultas y las advertencias. Si le preguntas a un asistente por una empresa colombiana o por cuántas empresas hay de algo, pídele que use AMC y que cite la fuente."], | |
| ["¿Usas Claude Desktop? Con una extensión que se instala en cinco minutos, sin programar, Claude consulta AMC directamente: ", | |
| { a: "Conecta AMC a tu asistente", href: "../asistente/index.html" }, "."], | |
| { h2: "Consultar sin descargar: la API de Hugging Face" }, | |
| ["Hugging Face sirve cada tabla por una API pública, sin clave. ", code("config"), " es el nombre de la tabla y ", code("split"), " siempre ", code("train"), ". Tres ejemplos, que se pueden abrir:"], | |
| ["Es un servicio de Hugging Face, no de AMC: puede tardar decenas de segundos y a veces falla. Para algo que tenga que funcionar siempre, usa DuckDB (abajo)."], | |
| [{ b: "Filtrar" }, " (una empresa por NIT, sin dígito de verificación): ", ext("filter", filter)], | |
| pre(filter), | |
| [{ b: "Buscar texto" }, " en los nombres: ", ext("search", search)], | |
| pre(search), | |
| [{ b: "Leer filas" }, ": ", ext("rows", rows)], | |
| pre(rows), | |
| { h2: "Consultar con SQL: DuckDB" }, | |
| ["DuckDB lee las tablas directamente de Hugging Face y trae solo las partes que la consulta necesita:"], | |
| pre(`SELECT chamber, count(*) AS vivas\nFROM 'hf://datasets/${DS}/data/companies.parquet'\nWHERE is_live\nGROUP BY 1 ORDER BY 2 DESC\nLIMIT 10;`), | |
| ["En el navegador, la ", { a: "consulta SQL", href: "../consulta/index.html" }, " corre el mismo DuckDB sobre las mismas tablas, con ejercicios guiados."], | |
| { h2: "Recetas" }, | |
| el("ul", {}, | |
| el("li", {}, "Empresas vivas, la cifra principal del sitio: ", code("SELECT count(*) FROM companies WHERE is_live")), | |
| el("li", {}, "Las que el registro marca «ACTIVA»: ", code("WHERE status = 'ACTIVA'")), | |
| el("li", {}, "Personas jurídicas vivas: ", code("WHERE in_target_list")), | |
| el("li", {}, "Una empresa por NIT: ", code("SELECT * FROM name_directory WHERE nit = '860025900'")), | |
| el("li", {}, "Por actividad: ", code("sector_code"), " es la clase CIIU rev. 4 cuando ", code("sector_status = 'rev4'"), "; su nombre está en ", code("activities"), ".")), | |
| { h2: "Antes de responder con estas cifras" }, | |
| el("ol", {}, | |
| rich("li", {}, [{ b: "«Viva» no es «activa». " }, code("is_live"), " es haber renovado la matrícula este año, y es un mínimo: las renovaciones llegan todo el año. El estado del registro («ACTIVA») cuenta más del doble. ", { a: "Por qué", href: "../metodologia/index.html#activa" }]), | |
| rich("li", {}, [{ b: "Las personas naturales se cuentan, nunca se nombran" }, " (Ley 1581 de 2012): en sus filas, nombre, NIT y matrícula vienen vacíos."]), | |
| rich("li", {}, [code("company_id"), " cambia en cada edición: para seguir a una empresa, usa ", code("nit"), "."]), | |
| rich("li", {}, [{ b: "La geografía es la cámara de comercio" }, ", no el municipio: el registro abierto no trae municipio, y una cámara cubre varios."]), | |
| rich("li", {}, ["Las cancelaciones masivas son depuraciones del registro, no cierres: ", code("en_dia_masivo"), " las marca."]), | |
| rich("li", {}, ["Los estados financieros están en ", { b: "miles de pesos" }, " y solo son de quienes reportan a Supersociedades; ", code("unidad_dudosa"), " marca los años en otra unidad."]), | |
| rich("li", {}, ["En contratos, para sumar valores usa ", code("valor / partes"), "; ", code("valor_dudoso"), " marca valores imposibles."]), | |
| rich("li", {}, ["Di siempre de qué corte es la cifra."])), | |
| { h2: "Cómo citar y enlazar" }, | |
| ["La cita y las fuentes de cada tabla están en ", { a: "Licencia y cómo citar", href: "../metodologia/index.html#citar" }, | |
| ". Para enlazar a una empresa: ", code("https://amc.clyxconsulting.com/historias/tu-empresa/#nit=<NIT>"), | |
| "; a una actividad en el explorador: ", code("https://amc.clyxconsulting.com/explorar/#clase=<CIIU>&camara=<código>"), "."], | |
| { h2: "Las tablas y sus columnas" }, | |
| ["Las ", { b: String(Object.keys(m.files).length) }, " tablas de esta edición. Abre una para ver la nota de cada columna."]), | |
| tables)); | |
| A.reveal(app); | |
| A.footer(s); | |
| window.__amcReady = true; | |
| } catch (e) { A.fail(app, e, "la lista de tablas"); } | |
| </script> | |
| </body> | |
| </html> | |