schema: https://opendataproducts.org/v4.1/schema/odps.yaml
version: 4.1
product:
  details:
    en:
      name: "{{string}}"
      productID: "{{string}}"
      visibility: "{{enum: private | invitation | organisation | dataspace | public}}"
      status: "{{enum: announcement | draft | development | testing | acceptance | production | sunset | retired}}"
      type: "{{enum: raw data | derived data | dataset | reports | analytic view | 3D visualisation | algorithm | decision support | automated decision-making | data-enhanced product | data-driven service | data-enabled performance | bi-directional}}"
      description: "{{string}}"
      valueProposition: "{{string}}"
      productVersion: "{{string: semver}}"
      portfolioPriority: "{{enum: critical | high | medium | low}}"
      governanceProfile: "{{enum: structured | enforced | automated | audit_ready}}"
      standards:
        - "{{string}}"
      tags:
        - "{{string}}"
      useCases:
        - useCase:
            useCaseTitle: "{{string}}"
            useCaseDescription: "{{string}}"
            useCaseURL: "{{string: url}}"

  productStrategy:
    status: "{{enum: Planned | Active | At Risk | Achieved | Partially Achieved | Cancelled | Expired}}"
    objectives:
      - en: "{{string}}"
    contributesToKPI:
      id: "{{string}}"
      name: "{{string}}"
      unit: "{{string}}"
      target: "{{number or string}}"
      direction: "{{enum: increase | decrease | at_least | at_most | equals}}"
      timeframe: "{{string}}"
      frequency: "{{string}}"
      owner: "{{string}}"
      calculation: "{{string}}"
    productKPIs:
      - id: "{{string}}"
        name: "{{string}}"
        unit: "{{string}}"
        target: "{{number or string}}"
        calculation: "{{string}}"

  dataQuality:
    declarative:
      default:
        displaytitle:
          en: "{{string}}"
        description:
          en: "{{string}}"
        dimensions:
          - dimension: "{{enum: accuracy | completeness | conformity | consistency | coverage | timeliness | validity | uniqueness}}"
            objective: "{{integer}}"
            weight: "{{integer}}"
            unit: "{{enum: percentage | number}}"

  SLA:
    declarative:
      default:
        name:
          en: "{{string}}"
        description:
          en: "{{string}}"
        dimensions:
          - dimension: "{{enum: latency | uptime | responseTime | errorRate | endOfSupport | endOfLife | updateFrequency | timeToDetect | timeToNotify | timeToRepair | emailResponseTime}}"
            objective: "{{integer}}"
            weight: "{{integer}}"
            unit: "{{string}}"

  contract:
    id: "{{string}}"
    type: "{{enum: ODCS | DCS}}"
    contractVersion: "{{string}}"
    contractURL: "{{string: url}}"

  license:
    en:
      scope:
        definition: "{{string}}"
        restrictions: "{{string}}"
        permanent: "{{boolean}}"
        exclusive: "{{boolean}}"
        rights:
          - "{{string}}"
      governance:
        ownership: "{{string}}"
        audit: "{{string}}"
        confidentiality: "{{string}}"
        applicableLaws: "{{string}}"

  dataAccess:
    default:
      name:
        en: "{{string}}"
      description:
        en: "{{string}}"
      outputPorttype: "{{enum: file | API | SQL | AI | gRPC | sFTP}}"
      format: "{{enum: TOON | JSON | XML | CSV | Excel | zip | plain text | GraphQL | MCP}}"
      authenticationMethod: "{{enum: OAuth | Token | API key | HTTP Basic | none}}"
      specification: "{{enum: OAS | RAML | Slate | MCP}}"
      specsURL: "{{string: url}}"
      accessURL: "{{string: url}}"
      documentationURL: "{{string: url}}"
    API:
      name:
        en: "{{string}}"
      description:
        en: "{{string}}"
      outputPorttype: "{{enum: file | API | SQL | AI | gRPC | sFTP}}"
      format: "{{enum: TOON | JSON | XML | CSV | Excel | zip | plain text | GraphQL | MCP}}"
      authenticationMethod: "{{enum: OAuth | Token | API key | HTTP Basic | none}}"
      specification: "{{enum: OAS | RAML | Slate | MCP}}"
      specsURL: "{{string: url}}"
      accessURL: "{{string: url}}"
      documentationURL: "{{string: url}}"
