ONTOGOBOntología Gubernamental de Colombia · MVP con datos reales

Documento de arquitectura (versión que corre en este MVP)

Fuente: docs/00-ARQUITECTURA.md del repositorio. Lo que aquí se describe está desplegado; lo que no, se declara como fase siguiente.

Ontología Gubernamental Colombiana con ciberseguridad post-cuántica, trazabilidad transaccional y detección de patrones de corrupción. Versión de diseño: 0.3.2 · 13 de septiembre de 2026 · Punto de partida real, no demostración.


1. Principio rector: nada existe sin procedencia

Cada hecho del sistema es una Observación con: fuente oficial, consulta exacta (URL/cuerpo), instante de captura, hash SHA-256 del cuerpo crudo, licencia, clasificación (Ley 1712 de 2014: pública / clasificada / reservada) y grado de confianza. La ontología define qué es cada cosa y cómo se relaciona; el grafo guarda instancias; el registro criptográfico hace el conjunto inalterable de forma demostrable; la analítica calcula indicadores y banderas rojas siempre reconducibles a observaciones. Un número sin procedencia no entra al sistema. Esa es la diferencia con un tablero.

2. Jerarquía de la ontología

Nivel 0 — Núcleo (independiente del dominio)

ClaseAlineaciónQué representa
AgenteOrganizacion (→ EntidadEstatal, ProveedorFiguraAsociativa, InstitucionDeEducacionSuperior, ActorSNCTI), Persona (seudonimizada), SistemaPROV-O prov:Agent, ORG, OCDSQuien actúa: entidad estatal, proveedor (persona jurídica con NIT), consorcio o unión temporal (Ley 80/1993 art. 7), IES, actor SNCTI, operador, sistema
TerritorioPais, Departamento, MunicipioGeoSPARQL, DANE (DIVIPOLA)Dónde ocurre; código DANE como clave natural; 1.122 unidades con centroide oficial; ubicadoEn (agentes) y suscritoEn (contratos, municipio de la unidad contratante)
EventoPROV-O prov:Activity, SOSAAlgo que ocurre en el tiempo: sismo, firma de contrato, decisión de tasa
RecursoDinero, Energia, Agua, InformacionLo que fluye y se conserva
DocumentoNorma, Contrato, InformeDCAT, CPSV-APActos y registros
IndicadorISO 37120/37122/37123, U4SSC, ODSMedida con fórmula, unidad, meta y responsable
ObservacionPROV-O prov:Entity, SOSA sosa:ObservationUn valor, en un periodo, sobre un sujeto, con procedencia
FuenteDCAT dcat:Dataset/dcat:DataServiceSistema oficial de origen con licencia y términos
AfirmacionCifra que circula (informe, prensa) con veredicto de contraste; nunca cuenta como dato
HallazgoHipótesis de riesgo generada por una regla; no una acusación
PoliticaDeAccesoODRL 2.2Quién puede ver qué, alineado con RLS

Nivel 1 — Dominios (módulos con datos reales en el MVP)

  1. Hacienda y contratación: RubroPresupuestal (PGN: apropiación → compromiso → obligación → pago), ProcesoDeContratacion, Contrato (con territorio de la unidad contratante), Proveedor y FiguraAsociativa (consorcios y uniones temporales; clave = NIT jurídico o código de proveedor SECOP II; las personas naturales, incluso registradas con «NIT», son Persona seudonimizada y nunca se guarda una cédula), EntidadEstatal (universo DAFP), ProyectoDeInversion (BPIN/SGR), SancionFiscal, TasaDeCambio.
  2. Energía y ambiente: SistemaInterconectado, Embalse, Rio, MedicionDeMercado (precio de bolsa, escasez), EstacionHidrometeorologica, ObservacionClimatica, FenomenoENSO, EventoSismico, CampoDeHidrocarburos, TituloMinero.
  3. Macro e internacional: SerieMacroeconomica (tasa de política, IBR, agregados, PIB, WGI, WEO, tipo de cambio BIS), EntidadFinanciera, ProyectoMultilateral, ListaDeSanciones (solo personas jurídicas para cotejo), IdentificadorLEI.
  4. Ciberseguridad: Vulnerabilidad (CVE), ExplotacionConocida (KEV), ProbabilidadDeExplotacion (EPSS), TecnicaAdversaria (ATT&CK), EstandarCriptografico (estado FIPS/RFC/borradores IETF), LlaveCriptografica, AsientoDeRegistro, AnclaMerkle.

Nivel 2 — Decisión (transversal)

Panorama presidencial (semáforos con procedencia) · Trazabilidad del dinero (sector → entidad → contrato → proveedor) · Atlas de esferas por escalas (país → departamento → municipio: cada territorio es un grafo; capas público / control / conocimiento / privado; marcos esfera, mapa teselado y orbe ontológico; paneles de decisión con cifras reales; public.atlas(nivel, código)) · Banderas rojas (reglas OCP/CoST adaptadas, evaluadas sobre datos vivos) · Estado de integridad (registro, anclas, testigos).

Derivaciones tras cada ingesta (sys_territorializar)

graf.territorializar() resuelve el código DANE por nombre (exacto → contención por palabra → contención → nombre compacto → nombre único en el país → centroide ≤ 150 km → sólo departamento) para entidades, IES, actores SNCTI, estaciones, sismos y contratos; materializa la capa de cada actor (props.capa) y las aristas ubicadoEn / suscritoEn. graf.depurar_adjudicatarios() elimina aristas adjudicadoA que dejaron de coincidir con el contrato y nodos de adjudicatarios huérfanos (sin hallazgos ni observaciones que los referencien). Después sys_derivar (indicadores) y sys_ejecutar_reglas.

3. Capas técnicas

CapaTecnología en el MVP (tier gratuito)Ruta a escala nacional (sólo cambia la factura)
DatosPostgreSQL 17 (Supabase) con esquemas ont, graf, ing, aud, ana, secMismo SQL en Supabase Team/Enterprise o PostgreSQL soberano (OCI Bogotá / Equinix BG2) con Patroni y PITR
IngestaEdge Functions (Deno) programadas por pg_cron + pg_net; cada captura guarda hash, bytes, estado HTTP y cuerpoMismas funciones en Kubernetes; colas pgmq; conectores adicionales
IdentidadSupabase Auth (JWT, MFA TOTP); rol y ámbito en app_metadataSSO SAML con Autenticación Digital (Servicios Ciudadanos Digitales) y directorio institucional
AccesoRLS habilitada y forzada; vistas security_invoker; clasificación Ley 1712 por fila; sin service_role en la aplicaciónIgual; HSM para llaves; pgaudit a SIEM
CriptografíaFirma híbrida ML-DSA-65 (FIPS 204) + Ed25519 por asiento; cadena SHA-256; anclas Merkle (RFC 6962) selladas con SLH-DSA (FIPS 205) y ML-DSA; sobres ML-KEM-768 + X25519 para reservados; llaves privadas en Supabase VaultLlaves en HSM FIPS 140-3 N3 con PQC (Thales Luna T7 / Entrust nShield 5); rotación programada; anclas a testigos institucionales (CGR, banca multilateral)
TransporteTLS 1.3; Vercel negocia X25519MLKEM768 (RFC 10024) en el bordePerímetro soberano con OpenSSL 3.5 / BoringSSL PQ; certificados ML-DSA (RFC 9881) cuando las CA públicas los emitan
Testigos externosAnclas publicadas en un repositorio público de GitHub (commit con fecha) y sello RFC 3161 opcionalContraloría, Banco de la República, banca multilateral, prensa: cada uno recibe la raíz
InterfazNext.js 15 (App Router) en Vercel; lectura vía PostgREST con la sesión del usuarioIgual, autoalojado en Kubernetes si se exige soberanía total
APIPostgREST (/rest/v1) con RLS + /api/v1 en Next.js documentada (OpenAPI)Igual + pasarela institucional (X-Road / Plataforma de Interoperabilidad)

4. Seguridad: modelo de amenazas y controles

AmenazaControl real en el MVP
Alteración retroactiva del registroCadena de hashes + firma híbrida por asiento + anclas Merkle horarias publicadas fuera del sistema
"Cosechar hoy, descifrar mañana"Sobres ML-KEM-768 + X25519 para datos reservados; TLS híbrido en el borde
Escalamiento de privilegios vía cookie/URLRol sólo desde JWT verificado; RLS forzada; pruebas adversariales automatizadas
Fuga por vistas analíticasTodas las vistas con security_invoker = true; prueba que compara conteos por rol
Uso de service_role desde la aplicaciónProhibido por diseño; la auditoría falla si lo detecta
Datos personales (Ley 1581)Seudonimización con sal secreta (Vault) de documentos de personas naturales; nombres no se ingieren; datos bancarios se descartan en origen. Regla conservadora del conector SECOP II: un nombre sólo se conserva con evidencia de personería jurídica (NIT 8xx/9xx o razón social) o figura asociativa; el resto es seudónimo. La auditoría adversarial comprueba que ninguna clave de Proveedor/FiguraAsociativa sea una cédula
Dependencia de un proveedor (lock-in)PostgreSQL estándar, SQL portable, OWL/SHACL/JSON-LD exportables, código abierto del Estado
Omisión deliberada (no registrar)No la resuelve la criptografía: anclas a testigos externos hacen detectable una poda por discontinuidad
Canal lateral en firma (JS no es de tiempo constante)Firma sólo en servidor; migración a node:crypto nativo (Node ≥ 24.7) o HSM antes de datos reservados

5. Reglas de banderas rojas (evaluadas sobre datos reales)

Cada regla produce un Hallazgo con: código, severidad, sujeto, evidencia (filas exactas), consulta reproducible y estado (abierta, verificada, descartada). Ninguna se presenta como acusación.

CódigoReglaFuente
OG-R01Participación de contratación directa por entidad frente a su propia línea baseSECOP II
OG-R02Concentración de proveedores por entidad (índice Herfindahl-Hirschman)SECOP II
OG-R03Fecha de fin igual a fecha de firma o duración cero (defecto de captura, no anomalía)SECOP II
OG-R04Proveedor con sanción fiscal vigente (cotejo por NIT)CGR responsabilidad fiscal
OG-R05Proveedor o figura asociativa coincidente con listas de sanciones internacionales (sólo personas jurídicas)UE FSF, Reino Unido, Banco Mundial
OG-R06Contratos firmados por una entidad en un mismo día a un mismo proveedor (fraccionamiento)SECOP II
OG-R07Valor por encima del percentil 99 de su tipo de contrato en la entidadSECOP II
OG-R08Entidad con ejecución (pagos/apropiación) fuera de banda frente a su sectorPGN (SIIF)

6. Ruta de escalado y costos (resumen; detalle en el modelo financiero)

Fase 0 (hoy): tier gratuito, USD 0. Fase 1 piloto institucional (6 meses): Supabase Pro + PITR + cómputo dedicado, Vercel Pro, GitHub Team, Cloudflare; auditoría criptográfica independiente y pentest. Fase 2 nacional (12–24 meses): núcleo soberano en Colombia (OCI Bogotá o colocation Tier III), HSM con PQC, SIEM, SOC, equipo de 25–40 personas, convenios de datos con CGR, DNP, MinHacienda, XM, IDEAM, DIAN (RUB, bajo art. 13 Ley 2195). Fase 3 (2028–2030): interoperabilidad X-Road, integración con Bre-B (ISO 20022) para trazabilidad de pagos, IA para contraste de afirmaciones y detección de patrones.

7. Lo que el sistema no hace (y se declara)

No garantiza que lo registrado sea verdad: protege la integridad del registro, no la veracidad del hecho. No detecta lo que nunca se registró. No es una cadena de bloques distribuida. No reemplaza a SECOP, SIIF, XM ni al IDEAM: los lee, los cruza y hace visible lo que por separado no se ve. No sustituye el juicio humano: una bandera roja es una hipótesis.