UNPKG

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
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; }