{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://catalog.lintel.tools/schemas/schemastore/barba-cv/latest.json",
  "title": "Barba-CV Schema",
  "description": "Open-source deterministic JSON schema for structured CV data. Barba-CV v1.2 keeps the CV payload at root for backward compatibility while introducing a meta block and an extensions area.",
  "x-lintel": {
    "source": "https://raw.githubusercontent.com/Eurobotics-Association/barba-cv/main/schema/barba-cv.schema.json",
    "sourceSha256": "165444cd4cee6185a5790587683f38e022f0c8107b817d9fb76363f16e8baf41",
    "fileMatch": [
      "barba-cv.json"
    ],
    "parsers": [
      "json"
    ]
  },
  "type": "object",
  "properties": {
    "barba_cv_version": {
      "type": "string",
      "description": "Version of the Barba-CV payload format. Version 1 corresponded to raw Barba-CV JSON without formal schema metadata. Version 1.2 introduces this field, a meta block, and an extensions area.",
      "examples": [
        "1.2"
      ]
    },
    "personal_info": {
      "$ref": "#/$defs/personalInfo"
    },
    "profile_summary": {
      "type": "string",
      "description": "Free-text professional summary or profile statement. May be empty or omitted."
    },
    "position_sought": {
      "type": "array",
      "description": "Target roles or positioning statements describing the candidate's desired position or professional orientation. Often used as the headline of the CV.",
      "items": {
        "type": "string"
      }
    },
    "experiences": {
      "type": "array",
      "description": "Professional experience entries. May be empty or omitted.",
      "items": {
        "$ref": "#/$defs/experienceItem"
      }
    },
    "education": {
      "type": "array",
      "description": "Education entries. May be empty or omitted.",
      "items": {
        "$ref": "#/$defs/educationItem"
      }
    },
    "skills": {
      "$ref": "#/$defs/skills"
    },
    "certifications": {
      "type": "array",
      "description": "Certification entries. May be empty or omitted.",
      "items": {
        "$ref": "#/$defs/certificationItem"
      }
    },
    "languages": {
      "type": "array",
      "description": "Languages known by the candidate. Language level remains flexible and human-readable.",
      "items": {
        "$ref": "#/$defs/languageItem"
      }
    },
    "interests": {
      "type": "array",
      "description": "Interests, hobbies, or other personal activities.",
      "items": {
        "type": "string"
      }
    },
    "project_achievements": {
      "type": "array",
      "description": "Structured project or achievement extracts derived from the CV. Replaces the legacy projects_achievements_extracts key.",
      "items": {
        "$ref": "#/$defs/projectAchievementItem"
      }
    },
    "meta": {
      "type": "object",
      "properties": {
        "cv_uuid": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Unique identifier for the CV within processing pipelines or databases. Typically a UUID generated by the CV processing engine."
        },
        "cv_title": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Human-readable title for the CV used for export, UI display, or filename generation."
        },
        "parsing_errors": {
          "type": "array",
          "description": "Parser or mapping issues detected during extraction. In v1 this lived at root; in v1.2 it moves under meta.",
          "items": {
            "type": "string"
          }
        },
        "ats_processed": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Whether the JSON content reflects ATS-compatible post-processing rather than raw extraction only."
        },
        "processor_engine": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Engine or processor identifier that generated or revised the payload, e.g. barba_cv_engine_1.1."
        },
        "parsed_at": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Human-readable parse timestamp or ingestion timestamp. Left flexible to avoid rejecting operational data."
        },
        "source_original_text": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Original extracted text source when stored alongside the payload."
        },
        "source_ats_revised_text": {
          "$ref": "#/$defs/stringOrNull",
          "description": "ATS-oriented revised text representation when available."
        },
        "original_filename": {
          "$ref": "#/$defs/stringOrNull"
        },
        "source_format": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Original source format such as pdf, docx, html, or text."
        },
        "ingested_at": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Human-readable timestamp for database ingestion or downstream storage."
        },
        "embedded_at": {
          "$ref": "#/$defs/stringOrNull",
          "description": "Human-readable timestamp indicating when vector embedding or downstream enrichment occurred."
        },
        "extraction_confidence_overall": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 0,
          "maximum": 1,
          "description": "Optional overall confidence score for AI extraction, between 0 and 1."
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "barba_cv_version"
  ],
  "additionalProperties": false
}
