{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/alfil-co/json-schema/alfil-co-proceso-contratacion-schema.json",
  "title": "ProcesoContratacion",
  "description": "Proceso de contratación con sus proponentes, ganadores y no ganadores",
  "x-generated": "2026-11-01",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/alfil-co-openapi.json#/components/schemas/ProcesoContratacion",
  "type": "object",
  "properties": {
    "id": {
      "type": "string"
    },
    "proponentes": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "estado_fuente": {
              "type": "string",
              "const": "no_consultado"
            },
            "registros": {
              "type": "null"
            },
            "unico_proponente": {
              "type": "null"
            },
            "truncado": {
              "type": "null"
            },
            "corte": {
              "type": "null"
            },
            "consultado_en": {
              "type": "string"
            }
          },
          "required": [
            "estado_fuente",
            "registros",
            "unico_proponente",
            "truncado",
            "corte",
            "consultado_en"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "estado_fuente": {
              "type": "string",
              "const": "ok"
            },
            "registros": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/Proponente"
              }
            },
            "unico_proponente": {
              "type": "boolean",
              "description": "Si únicamente se presentó un proponente — el hallazgo que expone esta feature"
            },
            "truncado": {
              "type": "boolean",
              "description": "Si la lista alcanzó el límite de la consulta (posiblemente incompleta)"
            },
            "corte": {
              "type": "string"
            },
            "consultado_en": {
              "type": "string"
            }
          },
          "required": [
            "estado_fuente",
            "registros",
            "unico_proponente",
            "truncado",
            "corte",
            "consultado_en"
          ],
          "additionalProperties": false
        },
        {
          "type": "object",
          "properties": {
            "estado_fuente": {
              "type": "string",
              "const": "error"
            },
            "registros": {
              "type": "null"
            },
            "unico_proponente": {
              "type": "null"
            },
            "truncado": {
              "type": "null"
            },
            "corte": {
              "type": "null"
            },
            "consultado_en": {
              "type": "string"
            }
          },
          "required": [
            "estado_fuente",
            "registros",
            "unico_proponente",
            "truncado",
            "corte",
            "consultado_en"
          ],
          "additionalProperties": false
        }
      ],
      "type": "object"
    }
  },
  "required": [
    "id",
    "proponentes"
  ],
  "additionalProperties": false,
  "$defs": {
    "Proponente": {
      "type": "object",
      "properties": {
        "nombre": {
          "type": "string"
        },
        "adjudicado": {
          "type": "boolean",
          "description": "Si este proponente resultó adjudicatario"
        },
        "calificacion": {
          "type": "string"
        },
        "fuente": {
          "type": "string",
          "enum": [
            "SECOP I",
            "SECOP II"
          ]
        }
      },
      "required": [
        "nombre",
        "adjudicado",
        "calificacion",
        "fuente"
      ],
      "additionalProperties": false,
      "description": "Proponente de un proceso de contratación (ganador o no)"
    }
  }
}