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)
| Clase | Alineación | Qué representa |
|---|---|---|
Agente → Organizacion (→ EntidadEstatal, Proveedor → FiguraAsociativa, InstitucionDeEducacionSuperior, ActorSNCTI), Persona (seudonimizada), Sistema | PROV-O prov:Agent, ORG, OCDS | Quien 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 |
Territorio → Pais, Departamento, Municipio | GeoSPARQL, 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) |
Evento | PROV-O prov:Activity, SOSA | Algo que ocurre en el tiempo: sismo, firma de contrato, decisión de tasa |
Recurso → Dinero, Energia, Agua, Informacion | — | Lo que fluye y se conserva |
Documento → Norma, Contrato, Informe | DCAT, CPSV-AP | Actos y registros |
Indicador | ISO 37120/37122/37123, U4SSC, ODS | Medida con fórmula, unidad, meta y responsable |
Observacion | PROV-O prov:Entity, SOSA sosa:Observation | Un valor, en un periodo, sobre un sujeto, con procedencia |
Fuente | DCAT dcat:Dataset/dcat:DataService | Sistema oficial de origen con licencia y términos |
Afirmacion | — | Cifra que circula (informe, prensa) con veredicto de contraste; nunca cuenta como dato |
Hallazgo | — | Hipótesis de riesgo generada por una regla; no una acusación |
PoliticaDeAcceso | ODRL 2.2 | Quién puede ver qué, alineado con RLS |
Nivel 1 — Dominios (módulos con datos reales en el MVP)
- Hacienda y contratación:
RubroPresupuestal(PGN: apropiación → compromiso → obligación → pago),ProcesoDeContratacion,Contrato(con territorio de la unidad contratante),ProveedoryFiguraAsociativa(consorcios y uniones temporales; clave = NIT jurídico o código de proveedor SECOP II; las personas naturales, incluso registradas con «NIT», sonPersonaseudonimizada y nunca se guarda una cédula),EntidadEstatal(universo DAFP),ProyectoDeInversion(BPIN/SGR),SancionFiscal,TasaDeCambio. - Energía y ambiente:
SistemaInterconectado,Embalse,Rio,MedicionDeMercado(precio de bolsa, escasez),EstacionHidrometeorologica,ObservacionClimatica,FenomenoENSO,EventoSismico,CampoDeHidrocarburos,TituloMinero. - 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. - 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
| Capa | Tecnología en el MVP (tier gratuito) | Ruta a escala nacional (sólo cambia la factura) |
|---|---|---|
| Datos | PostgreSQL 17 (Supabase) con esquemas ont, graf, ing, aud, ana, sec | Mismo SQL en Supabase Team/Enterprise o PostgreSQL soberano (OCI Bogotá / Equinix BG2) con Patroni y PITR |
| Ingesta | Edge Functions (Deno) programadas por pg_cron + pg_net; cada captura guarda hash, bytes, estado HTTP y cuerpo | Mismas funciones en Kubernetes; colas pgmq; conectores adicionales |
| Identidad | Supabase Auth (JWT, MFA TOTP); rol y ámbito en app_metadata | SSO SAML con Autenticación Digital (Servicios Ciudadanos Digitales) y directorio institucional |
| Acceso | RLS habilitada y forzada; vistas security_invoker; clasificación Ley 1712 por fila; sin service_role en la aplicación | Igual; HSM para llaves; pgaudit a SIEM |
| Criptografía | Firma 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 Vault | Llaves en HSM FIPS 140-3 N3 con PQC (Thales Luna T7 / Entrust nShield 5); rotación programada; anclas a testigos institucionales (CGR, banca multilateral) |
| Transporte | TLS 1.3; Vercel negocia X25519MLKEM768 (RFC 10024) en el borde | Perímetro soberano con OpenSSL 3.5 / BoringSSL PQ; certificados ML-DSA (RFC 9881) cuando las CA públicas los emitan |
| Testigos externos | Anclas publicadas en un repositorio público de GitHub (commit con fecha) y sello RFC 3161 opcional | Contraloría, Banco de la República, banca multilateral, prensa: cada uno recibe la raíz |
| Interfaz | Next.js 15 (App Router) en Vercel; lectura vía PostgREST con la sesión del usuario | Igual, autoalojado en Kubernetes si se exige soberanía total |
| API | PostgREST (/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
| Amenaza | Control real en el MVP |
|---|---|
| Alteración retroactiva del registro | Cadena 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/URL | Rol sólo desde JWT verificado; RLS forzada; pruebas adversariales automatizadas |
| Fuga por vistas analíticas | Todas las vistas con security_invoker = true; prueba que compara conteos por rol |
Uso de service_role desde la aplicación | Prohibido 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ódigo | Regla | Fuente |
|---|---|---|
| OG-R01 | Participación de contratación directa por entidad frente a su propia línea base | SECOP II |
| OG-R02 | Concentración de proveedores por entidad (índice Herfindahl-Hirschman) | SECOP II |
| OG-R03 | Fecha de fin igual a fecha de firma o duración cero (defecto de captura, no anomalía) | SECOP II |
| OG-R04 | Proveedor con sanción fiscal vigente (cotejo por NIT) | CGR responsabilidad fiscal |
| OG-R05 | Proveedor o figura asociativa coincidente con listas de sanciones internacionales (sólo personas jurídicas) | UE FSF, Reino Unido, Banco Mundial |
| OG-R06 | Contratos firmados por una entidad en un mismo día a un mismo proveedor (fraccionamiento) | SECOP II |
| OG-R07 | Valor por encima del percentil 99 de su tipo de contrato en la entidad | SECOP II |
| OG-R08 | Entidad con ejecución (pagos/apropiación) fuera de banda frente a su sector | PGN (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.