consulta-nit-lib
Version:
Consulta unificada de información empresarial por NIT desde datos.gov.co y rues.org.co
104 lines (103 loc) • 4.04 kB
JavaScript
import fetch from 'node-fetch';
export async function consultarEmpresaPorNIT(nit) {
const fuentes = [];
let govData = {};
let ruesData = {};
// Paso 1: datos.gov.co
try {
const res = await fetch(`https://www.datos.gov.co/resource/c82u-588k.json?nit=${nit}`);
const json = await res.json();
if (json.length > 0) {
fuentes.push('datos.gov.co');
const item = json[0];
govData = {
razon_social: item.razon_social,
nit: item.nit,
dv: item.digito_verificacion,
camara_comercio: item.camara_comercio,
matricula: item.matricula?.padStart(10, '0'),
estado: item.estado_matricula,
fecha_matricula: item.fecha_matricula,
fecha_renovacion: item.fecha_renovacion,
ultimo_ano_renovado: item.ultimo_ano_renovado,
tipo_sociedad: item.tipo_sociedad,
organizacion_juridica: item.organizacion_juridica,
ciiu_principal: {
codigo: item.cod_ciiu_act_econ_pri,
descripcion: ''
},
codigo_camara: item.codigo_camara
};
}
}
catch { }
// Paso 2: fallback para código_camara y matrícula
let codigo_camara;
let matricula;
try {
if (!govData.nit) {
const meta = await fetch(`https://www.datos.gov.co/resource/c82u-588k.json?$select=codigo_camara,matricula&nit=${nit}`);
const fallback = await meta.json();
if (fallback.length > 0) {
codigo_camara = fallback[0].codigo_camara;
matricula = fallback[0].matricula;
}
}
else {
codigo_camara = govData.codigo_camara;
matricula = govData.matricula;
}
}
catch { }
// Paso 3: consultar rues.org.co
if (codigo_camara && matricula) {
const union = `${codigo_camara}${matricula}`;
const relleno = '0'.repeat(12 - union.length);
const codigo = `${codigo_camara}${relleno}${matricula}`;
try {
const ruesRes = await fetch(`https://ruesapi.rues.org.co/WEB2/api/Expediente/DetalleRM/${codigo}`);
const json = await ruesRes.json();
if (json.codigo_error === '0000') {
fuentes.push('rues.org.co');
const r = json.registros;
ruesData = {
razon_social: r.razon_social,
nit: r.numero_identificacion,
dv: r.dv,
camara_comercio: r.camara,
matricula: r.matricula,
estado: r.estado,
fecha_matricula: r.fecha_matricula,
fecha_renovacion: r.fecha_renovacion,
ultimo_ano_renovado: r.ultimo_ano_renovado,
tipo_sociedad: r.tipo_sociedad,
organizacion_juridica: r.organizacion_juridica,
ciiu_principal: {
codigo: r.cod_ciiu_act_econ_pri,
descripcion: r.desc_ciiu_act_econ_pri
}
};
}
}
catch { }
}
// Paso 4: unión con prioridad a govData
const resultado = {};
const camposString = [
"razon_social", "nit", "dv", "camara_comercio", "matricula", "estado",
"fecha_matricula", "fecha_renovacion", "ultimo_ano_renovado",
"tipo_sociedad", "organizacion_juridica"
];
for (const campo of camposString) {
const valor = govData[campo];
resultado[campo] = valor ?? ruesData[campo];
}
resultado.ciiu_principal = govData.ciiu_principal?.codigo
? govData.ciiu_principal
: ruesData.ciiu_principal;
if (!resultado.razon_social) {
return { error: "No se encontró información para el NIT" };
}
resultado.fuentes = fuentes;
return resultado;
}