openapi: 3.1.1
info:
  title: CandidateProfileResource
  version: 2.1.0
  description: >
    Extension attributes for a candidate profile resource in a Beckn v2.1
    hiring-candidates network. Describes a candidate's professional profile
    available for discovery by employer BAPs. Contains zero PII — identity
    is managed at the beckn:parties level of the Contract object.
  contact:
    name: Beckn Protocol
    url: https://becknprotocol.io

x-beckn-pack: hiring-candidates
x-beckn-container: resourceAttributes
x-beckn-schema-version: "2.1.0"
x-beckn-protocol-version: "2.0"

components:
  schemas:

    WorkMode:
      type: string
      enum: [ONSITE, REMOTE, HYBRID]
      description: Candidate's preferred work arrangement

    ExperienceLevel:
      type: string
      enum: [FRESHER, JUNIOR, MID, SENIOR, LEAD, EXECUTIVE]
      description: Candidate's seniority band

    AvailabilityStatus:
      type: string
      enum: [ACTIVELY_LOOKING, OPEN_TO_OPPORTUNITIES, NOT_LOOKING]
      description: Candidate's current job-search status

    SkillEntry:
      type: object
      description: >
        A single skill entry with optional VC attestation. Supports graceful
        degradation: attested=false for self-declared skills, attested=true
        with proof_request_url for VC-backed skills.
      required: [skill_name, attested]
      properties:
        skill_name:
          type: string
          description: Name of the skill
          x-jsonld-id: "cpra:skillName"
        proficiency:
          type: string
          enum: [BEGINNER, INTERMEDIATE, ADVANCED, EXPERT]
          description: Self-assessed proficiency level
          x-jsonld-id: "cpra:proficiency"
        years_of_experience:
          type: number
          description: Years of experience with this skill
          x-jsonld-id: "cpra:yearsOfExperience"
        attested:
          type: boolean
          description: Whether this skill has VC-backed attestation
          x-jsonld-id: "cpra:attested"
        proof_request_url:
          type: string
          format: uri
          description: URI to DeDi endpoint for VC attestation (only when attested=true)
          x-jsonld-id: "cpra:proofRequestUrl"
        proof_metadata_hash:
          type: string
          description: Integrity hash of attestation metadata (only when attested=true)
          x-jsonld-id: "cpra:proofMetadataHash"

    EducationEntry:
      type: object
      description: An educational qualification entry
      properties:
        degree:
          type: string
          description: Degree or qualification title
          x-jsonld-id: "cpra:degree"
        field_of_study:
          type: string
          description: Subject or major
          x-jsonld-id: "cpra:fieldOfStudy"
        institution_type:
          type: string
          enum: [UNIVERSITY, COLLEGE, POLYTECHNIC, VOCATIONAL, ONLINE, OTHER]
          description: Type of institution (no PII — not institution name)
          x-jsonld-id: "cpra:institutionType"
        year_of_completion:
          type: integer
          description: Year the qualification was completed
          x-jsonld-id: "cpra:yearOfCompletion"
        qualification_level:
          $ref: "#/components/schemas/CodedValue"
          description: NSQF or equivalent coded level
          x-jsonld-id: "cpra:qualificationLevel"

    CodedValue:
      type: object
      description: >
        A value governed by an external classification authority,
        e.g. ISIC industry codes, NSQF qualification levels.
      required: [code]
      properties:
        code:
          type: string
          description: The classification code
          x-jsonld-id: "cpra:code"
        name:
          type: string
          description: Human-readable label for the code
          x-jsonld-id: "cpra:name"
        "@context":
          type: string
          format: uri
          description: URI of the classification authority's code registry
          x-jsonld-id: "cpra:context"

    CandidateProfileResource:
      type: object
      description: >
        Domain-specific extension attributes for a candidate profile resource.
        Describes professional background, skills, preferences, and availability
        for employer discovery. Zero PII — no name, contact, or identity fields.
        preferred_location and current_location use the shared hiring-common
        JobLocation type (supports both city/region text and GeoJSON geo-spatial
        queries) rather than an inline CandidateLocation sub-schema, ensuring
        consistent location semantics across job listings and candidate profiles.
        relocation_willing is a direct property (not nested inside location) so
        it remains independently queryable by BAPs without unpacking the location
        sub-object.
      x-jsonld-context: "./context.jsonld"
      x-beckn-container: resourceAttributes
      x-status: under-review
      x-tags:
        - hiring
        - hiring-candidates
        - resource
        - transport-hiring
      required: [experience_level, availability_status]
      properties:
        experience_level:
          $ref: "#/components/schemas/ExperienceLevel"
          description: Candidate's overall seniority band
          x-jsonld-id: "cpra:experienceLevel"
        total_experience_years:
          type: number
          description: Total years of professional experience
          x-jsonld-id: "cpra:totalExperienceYears"
        availability_status:
          $ref: "#/components/schemas/AvailabilityStatus"
          description: Candidate's current job-search status
          x-jsonld-id: "cpra:availabilityStatus"
        notice_period:
          type: string
          description: >
            Notice period as ISO 8601 duration (e.g. P30D, P2M, P0D for immediate).
            Replaces integer + unit pair for calendar-system neutrality.
          x-jsonld-id: "cpra:noticePeriod"
        preferred_work_mode:
          $ref: "#/components/schemas/WorkMode"
          description: Candidate's preferred work arrangement
          x-jsonld-id: "cpra:preferredWorkMode"
        preferred_location:
          $ref: "https://schema.nfh.global/JobLocation/v2.1/attributes.yaml#/components/schemas/JobLocation"
          description: Candidate's preferred work location (city/region level or geo-spatial)
          x-jsonld-id: "cpra:preferredLocation"
        current_location:
          $ref: "https://schema.nfh.global/JobLocation/v2.1/attributes.yaml#/components/schemas/JobLocation"
          description: Candidate's current location (city/country level only — not precise)
          x-jsonld-id: "cpra:currentLocation"
        relocation_willing:
          type: boolean
          description: >
            Whether the candidate is willing to relocate. Direct property (not
            nested in location) for independent BAP-side filterability.
          x-jsonld-id: "cpra:relocationWilling"
        skills:
          type: array
          items:
            $ref: "#/components/schemas/SkillEntry"
          description: List of skills with optional VC attestation
          x-jsonld-id: "cpra:skills"
        education:
          type: array
          items:
            $ref: "#/components/schemas/EducationEntry"
          description: Educational qualifications
          x-jsonld-id: "cpra:education"
        industry_preference:
          type: array
          items:
            $ref: "#/components/schemas/CodedValue"
          description: Preferred industries using ISIC codes
          x-jsonld-id: "cpra:industryPreference"
        functional_area_preference:
          type: array
          items:
            type: string
          description: Preferred job functions (e.g. Engineering, Marketing)
          x-jsonld-id: "cpra:functionalAreaPreference"
        expected_salary:
          $ref: "https://schema.nfh.global/SalarySpecification/v2.1/attributes.yaml#/components/schemas/SalarySpecification"
          description: Expected salary range with currency and period
          x-jsonld-id: "cpra:expectedSalary"
        languages:
          type: array
          items:
            type: string
          description: Languages spoken (ISO 639-1 codes)
          x-jsonld-id: "cpra:languages"
        open_to_job_types:
          type: array
          items:
            type: string
            enum: [FULL_TIME, PART_TIME, CONTRACT, INTERNSHIP, GIG]
          description: Job engagement types the candidate is open to
          x-jsonld-id: "cpra:openToJobTypes"
        reputation_summary:
          $ref: "https://schema.nfh.global/ReputationSummary/v2.1/attributes.yaml#/components/schemas/ReputationSummary"
          description: >
            Attested reputation summary for this candidate, sourced from
            network-verified ratings. Safe at discovery stage — no PII.
          x-jsonld-id: "cpra:reputationSummary"
