Mostrar código
library(arrow)
data <- read_parquet("C:/Users/000278969/OneDrive - UPB/Documentos/Consultorias/2026_Proyecto_ART/Datos/Nueva_Estrategia/Merge_ruralidad/Base_Final_Secop_Ruralidad_Nits.parquet")
dim(data)[1] 4573194 61
Este documento presenta una descripción del proceso de filtros realizados para establecer los contratos del SECOP-II que permitirán cuantificar los costos unitarios, focalizando el análisis en los municipios y en las subregiones de interes para la ejecución de los PATR.
SECOP-II, Costeo de precios observados de mercado, Tipos de Contratos, Sub-programas PATR
Para llevar a cabo el siguiente desarrollo se utilizaron las siguientes librerías funcionales:
arrow — permite cargar archivos en formato .parquet, un formato columnar optimizado para bases de datos de gran volumen. Es fundamental dado que la base SECOP-II supera los 4 millones de filas con 57 variables.
ggplot2 — es la librería central de visualización del documento. Se emplea para construir múltiples gráficos de barras horizontales que ilustran la distribución de contratos por estado, por departamento y por categoría de ruralidad. También se usa dentro de la función crear_grafico() para generar los gráficos del Top 10 de clases, familias y productos.
scales — complementa a ggplot2 en el formateo de ejes numéricos, permitiendo expresar frecuencias en millones y aplicar separadores de miles para mejorar la legibilidad de los gráficos.
knitr — provee la función kable() para construir tablas formateadas en HTML dentro del documento Quarto. Se aplica en tres tablas: estados del contrato, niveles UNSPSC y resultados de filtros por nivel de agregación.
kableExtra — extiende las capacidades de kable() mediante funciones como kable_styling(), column_spec() y row_spec(), que permiten aplicar colores, negritas, anchos de columna y estilos Bootstrap a las tablas.
dplyr — se utiliza para la manipulación de datos en la construcción de la tabla cruzada entre municipios posconflicto y categoría de ruralidad.
gridExtra — facilita la organización de múltiples gráficos de ggplot2 en una cuadrícula mediante grid.arrange(), usado para presentar en paralelo los Top 10 de clases, familias y productos UNSPSC.
stringr — se emplea dentro de la función crear_grafico() a través de str_wrap() para controlar el ancho del texto en las etiquetas del eje Y, evitando que los nombres largos se desborden visualmente.
La base de datos con la cual se identificarán los contratos realizados a nivel de municipio y a nivel de supbregión, es la base de datos del SECOP-II. Esta base contiene los contratos y sobre estos se deben hacer filtros que permitan identificar contratos asociados estrechamente a los productos, proyectos y servicios que contienen los PATR en cada uno de los subprogramas que los contienen.
El siguiente código carga la base de datos, a patir de un tipo de archivo .parquet para facilitar su manipulación. En general y como puede notarse, la base de datos tiene más de 4 millones de filas con 57 variables que describen la carácteristicas de los contratos realizados por entidades gubernamentales.
library(arrow)
data <- read_parquet("C:/Users/000278969/OneDrive - UPB/Documentos/Consultorias/2026_Proyecto_ART/Datos/Nueva_Estrategia/Merge_ruralidad/Base_Final_Secop_Ruralidad_Nits.parquet")
dim(data)[1] 4573194 61
También se refiere a continuación el nombre de las variables o columnas que integran la base de datos. La base contiene ciertas variables importantes, a saber: el estado del contrato, el tipo de contrato, departamento, ciudad, descripción del contrato y valor del contrato. Este último, es el valor “agregado”asociado a este proyecto el cual no tiene en cuenta las cantidades o no es un valor unitario. De igual manera, variables como sector, rama y orden, ayudan a determinar los llamados macro-sectores sobre los cuales se procederán a hacer los filtros para acotar la base de datos pretendiendo identificar los proyectos cercanos a los productos del PATR, y los sub-programas.
names(data)
1 nombre_muni_f
2 nit_entidad
3 id_contrato
4 estado_contrato
5 tipo_de_contrato
6 espostconflicto
7 nombre_entidad
8 departamento
9 ciudad
10 descripcion_del_proceso
11 objeto_del_contrato
12 valor_del_contrato
13 fecha_de_inicio_del_contrato
14 fecha_de_fin_del_contrato
15 localizaci_n
16 orden
17 sector
18 rama
19 entidad_centralizada
20 codigo_de_categoria_principal
21 origen_de_los_recursos
22 destino_gasto
23 valor_de_pago_adelantado
24 valor_facturado
25 valor_pendiente_de_pago
26 valor_pagado
27 valor_amortizado
28 valor_pendiente_de
29 valor_pendiente_de_ejecucion
30 estado_bpin
31 c_digo_bpin
32 anno_bpin
33 puntos_del_acuerdo
34 pilares_del_acuerdo
35 presupuesto_general_de_la_nacion_pgn
36 sistema_general_de_participaciones
37 sistema_general_de_regal_as
38 recursos_propios_alcald_as_gobernaciones_y_resguardos_ind_genas_
39 recursos_de_credito
40 recursos_propios
41 codigo_entidad
42 duraci_n_del_contrato
43 codigo_clase_6
44 codigo_segmento
45 nombre_segmento
46 codigo_familia
47 nombre_familia
48 codigo_clase
49 nombre_clase
50 nombre_producto
51 tipo_match
52 nombre_muni
53 nombre_depa
54 Freq
55 razon_social
56 nombre_subsector
57 cod_dane
58 Departamento
59 Municipio
60 Categoría de ruralidad 2025
61 depa
Dado que es importante establecer y carácterizar estas variables para hacer el cruce con las bases de datos de los sub programas a nivel regional, se presenta gráficamente la estructura de la variables anterior. Debido a que pueden existir variaciones en los precios en contratos en ejecución, se debe en principio concentrar el analisis en contratos cuyo estado es “terminado” o “cerrado”, aunque este último también es objeto de variaciones aunque su representatividad en terminos de muestra es mayor.
La tabla siguiente ilustra las definiciones asociadas a los diferentes estados del contrato, desde “en Edición” hasta “Rechazado”. Con el fin de tener la mayor disponibilidad de contratos posibles, es recomendable que se utilicen para efectos de la identificación de los precios y cantidades factibles, los tipos de contratos: “Cerrado”, “Terminado” y Firmado / Aprobado”
| Estado | Definición técnica |
|---|---|
| En edición | Estado inicial del contrato electrónico. La entidad estructura y diligencia la información en la plataforma. Las secciones de Modificaciones e Incumplimientos están bloqueadas. No tiene efectos jurídicos. |
| Pendiente de firma | El contrato ha sido enviado al proveedor para revisión y aceptación. El documento electrónico existe, pero aún no ha sido suscrito por ninguna de las partes. |
| En revisión del Proveedor | El contrato se encuentra en manos del proveedor para que lo examine. Puede aprobarlo o rechazarlo según su acuerdo con las condiciones establecidas por la entidad. |
| Firmado / Aprobado | Ambas partes han suscrito el contrato electrónico. Adquiere plena validez jurídica y probatoria. Se desbloquean las secciones de Modificaciones e Incumplimientos y el contrato es público. |
| En ejecución | El contrato ha iniciado formalmente y las partes están cumpliendo sus obligaciones. El supervisor registra avances, el proveedor carga facturas y la entidad las aprueba o rechaza. |
| Rechazado | El proveedor rechazó las condiciones del contrato. La entidad recibe notificación y el expediente regresa a estado de edición para correcciones. |
| Terminado | El objeto contractual ha concluido, normal o anormalmente (terminación bilateral, unilateral o caducidad). Solo se permite gestionar pagos pendientes y documentos poscontractuales. |
| Cerrado | Estado definitivo e irreversible. Se produce una vez cumplidas todas las fechas asociadas y finalizada la liquidación (si aplica). La plataforma bloquea cualquier actualización posterior. |
En cuanto a los departamentos, y la distribución geográfica de los contratos, debe advertirse que Bogotá concentra la mayoría de registros, con mas de un 30% de los registros contractuales globales (para todos los tipos de contratos). Valle del Cauca concentra el10.4% y Antioquia el 9%. Esto es importante porque el interés de la investigación se concentra en las regiones PDET donde tienen lugar los PATR.
color = "black", size = 3, hjust = -0.2) + # Etiquetas a la derecha
scale_y_continuous(labels = scales::comma_format(scale = 1e-6, suffix = "M")) + # Formato en millones
theme_minimal() +
theme(axis.text.y = element_text(size = 8)) # Ajustar tamaño de texto en el eje y
Es importante, de igual manera, resaltar que cuando se filtran los contratos en estado “cerrado” la base pasa de más de 4 millones a sólo mas de un millon de registros y, por tanto, su distribución y representatividad geográfica se afecta significativamente. Podemos ahora considerar la variable.
La base de datos contiene tres variables clave, a saber, “nombre_producto”, “nombre_familia” y “nombre_clase”. En general, estas variables recogen información de agrupación de categorías de los contratos y, por lo tanto, permiten realizar el proceso de filtrado con las potenciales similitudes que tienen estas cateogorías con las referidas en los indicadores de subprograma. Las variables Segmento, Familia, Clase y Producto en SECOP II corresponden al sistema de clasificación UNSPSC (United Nations Standard Products and Services Code, versión 14.080), adoptado por Colombia Compra Eficiente como estándar obligatorio para la contratación pública.
| Nivel | Variable SECOP II | Estructura del código | Definición técnica | Ejemplo ilustrativo |
|---|---|---|---|---|
| 1 | Segmento | Dígitos 1–2 (XX000000) | Agrupación más amplia del clasificador. Constituye la agregación lógica de familias de productos para propósitos analíticos y de política pública. Refleja las grandes etapas de generación de valor: materias primas (10–15), equipo industrial (20–27), componentes y suministros (30–41), productos de uso final (42–60), servicios (70–94) y terrenos, edificios y vías (95). | 72 – Servicios de edificación y construcción |
| 2 | Familia | Dígitos 3–4 (XXXX0000) | Segundo nivel de desagregación. Corresponde a un grupo de categorías de productos o servicios interrelacionados dentro de un mismo segmento. Permite agrupar líneas de gasto afines para efectos de análisis presupuestal y de mercado. | 7210 – Servicios de construcción de edificios |
| 3 | Clase | Dígitos 5–6 (XXXXXX00) | Tercer nivel de desagregación y nivel mínimo exigido en la contratación pública colombiana. Agrupa bienes o servicios que comparten características técnicas comunes. Es el nivel requerido para el Registro Único de Proponentes (RUP) y el Plan Anual de Adquisiciones. | 721015 – Obras de infraestructura vial |
| 4 | Producto | Dígitos 7–8 (XXXXXXXX) | Nivel más específico del clasificador (8 dígitos completos). Identifica un bien o servicio concreto dentro de una clase. Las entidades pueden codificar hasta este nivel cuando disponen de información suficiente sobre el objeto a contratar; sin embargo, no es obligatorio para la inscripción en el RUP. | 72101501 – Construcción de carreteras pavimentadas |
La tabla 1 muestra el numero de filas o frecuencias de categorias diferentes de cada una de estas variables en la base de datos completa (sin ningún filtro previo). La variable “familia” establece el mayor nivel de agregación y, por lo tanto, ayuda a configurar el filtro inicial para macro sectores correspondientes a las lineas estrategicas.
| # | Nivel UNSPSC filtrado | Número de registros |
|---|---|---|
| 1 | Familia | 405 |
| 2 | Clase | 2.346 |
| 3 | Producto | 12.697 |
De acuerdo a la tabla 3, la distribución de cateogorias de la variable Familia presenta el mayor nivel de agregación, y sus catgorias por tanto pueden ser asociadas a la bateria programatica del PATR y la relación de productos y proyectos objeto de costeo.
La estrategía de muestreo que se propone se basa en la condición y categorías de ruralidad de los municipios del País, teniendo como referencia al 2025. Es importante indicar que la base completa tiene contratos que no son realizados por municipios o departamentos, sino por entidades del nivel nacional. Estos contratos no son considerados en propiedad para llevar a cabo los costos unitarios por subprograma y por subregión. Para hacer este proceso, entonces, se lleva a cabo un merge entre la base de datos SECOP-II y la base de datos que contiene los criterios de ruralidad.
La siguiente es la distribución de los contratos por los distintos criterios de ruralidad.
De los datos considerados, la categoría rural diperso representa sólo un 2.4% de todos los contratos considerados, y la condición y Rural el 9.1% del universo. La mayor participación ocurre en ciudades, como puede corroborarse para el caso de una mayor concentración de contratos para Bogotá, de un 34.1% sobre el universo completo.
| Municipio posconflicto | Ciudades y aglomeraciones | Intermedio | Rural | Rural disperso | Total | % del total |
|---|---|---|---|---|---|---|
| No | 1.962.269 | 328.242 | 235.631 | 61.803 | 2.587.945 | 99.9% |
| Si | 376 | 1.086 | 95 | 3 | 1.560 | 0.1% |
| Total | 1.962.645 | 329.328 | 235.726 | 61.806 | 2.589.505 | 100% |
La asociación. Este es, por tanto, el procedimiento de filtros. Primero se establece un macro-sector, este implica solamente un termino clave; en segundo lugar, se filtra por clasese y, finalmente por producto, luego se establece la relación con la variable de descripción del contrato para finalmente tener los contratos que cumplen la intersección. Cuando se filtran estas variables y se examinan las categorias mas frecuentes conduce a lo siguiente distribución:
La propuesta que se establece es identificar la relación entre la bateria de indicadores de producto y gestión del PATR, al realizar modelos de Procesamiento de lenguaje Natural con el fin de advertir sus similitudes de naturaleza semantica con los filtros secuenciales de las bases de datos anteriores.