# GENERATED. Do not change this line unless the file contains project specific changes.
# DO NOT EDIT THIS FILE. Changes are overwritten on the next build.
# Owner command: onboarding.intake.schema.export
# Edit instead: the onboarding.intake.schema.export generator source (not this file).
# Regenerate:   pnpm exec werkstatt run onboarding.intake.schema.export
$id: https://werkstatt.local/specs/onboarding/v0.1.0/werkstatt-intake.schema.yaml
title: Werkstatt Intake v1 envelope
$schema: https://json-schema.org/draft/2020-12/schema
type: object
properties:
  schema:
    type: string
    const: werkstatt:intake/v1
  intakeId:
    type: string
    pattern: ^int_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
  systemId:
    type: string
    pattern: ^[a-z][a-z0-9-]{1,48}$
  producedAt:
    type: string
    format: date-time
    pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
  classification:
    type: object
    properties:
      locales:
        minItems: 1
        type: array
        items:
          type: object
          properties:
            tag:
              type: string
              pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
            role:
              type: string
              enum:
                - primary
                - secondary
            sourceLanguageBy:
              type: string
              enum:
                - client
                - studio
                - translation
            reviewer:
              type: string
              enum:
                - client
                - studio
                - external
                - unassigned
            evidenceRefs:
              type: array
              items:
                type: string
                minLength: 1
          required:
            - tag
            - role
            - sourceLanguageBy
            - reviewer
          additionalProperties: false
      jurisdiction:
        type: string
        pattern: ^[A-Z]{2}$
      markets:
        type: array
        items:
          type: object
          properties:
            market:
              type: string
            confidence:
              type: string
              enum:
                - high
                - medium
                - low
                - unknown
          required:
            - market
            - confidence
          additionalProperties: false
      audiences:
        type: array
        items:
          type: string
      conversionModel:
        type: string
        enum:
          - information-only
          - inquiry
          - booking
          - donation
          - ecommerce
          - referral
      hasEcommerce:
        type: boolean
      existingSite:
        type:
          - string
          - "null"
      domain:
        anyOf:
          - type: string
            pattern: ^([a-z0-9-]+\.)+[a-z]{2,}$
          - type: "null"
      profile:
        type: string
        enum:
          - visitka
          - standard
          - asset-grade
      pageSetIntent:
        minItems: 1
        type: array
        items:
          type: object
          properties:
            intent:
              type: string
            evidenceRefs:
              type: array
              items:
                type: string
                minLength: 1
          required:
            - intent
            - evidenceRefs
          additionalProperties: false
      materialMentions:
        type: array
        items:
          type: string
    required:
      - locales
      - jurisdiction
      - conversionModel
      - profile
      - pageSetIntent
    additionalProperties: false
  pbp:
    minItems: 1
    type: array
    items:
      type: object
      properties:
        schema:
          type: string
          enum:
            - pbp/business@1
            - pbp/legal-identity@1
            - pbp/offering@1
            - pbp/claim@1
            - pbp/evidence-source@1
            - pbp/disclosure@1
            - pbp/contact-point@1
            - pbp/brand@1
        id:
          type: string
          minLength: 1
        type:
          type: string
        status:
          type: string
          enum:
            - draft
            - published
            - superseded
        statementByLocale:
          type: object
          propertyNames:
            type: string
            pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
          additionalProperties:
            type: string
            minLength: 1
        localeNeutral:
          type: boolean
      required:
        - schema
        - id
        - type
        - status
      additionalProperties: {}
      allOf:
        - if:
            properties:
              schema:
                const: pbp/business@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-business-1"
        - if:
            properties:
              schema:
                const: pbp/legal-identity@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-legal-identity-1"
        - if:
            properties:
              schema:
                const: pbp/offering@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-offering-1"
        - if:
            properties:
              schema:
                const: pbp/claim@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-claim-1"
        - if:
            properties:
              schema:
                const: pbp/evidence-source@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-evidence-source-1"
        - if:
            properties:
              schema:
                const: pbp/disclosure@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-disclosure-1"
        - if:
            properties:
              schema:
                const: pbp/contact-point@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-contact-point-1"
        - if:
            properties:
              schema:
                const: pbp/brand@1
            required:
              - schema
          then:
            $ref: "#/$defs/pbp-brand-1"
  annotations:
    type: object
    propertyNames:
      type: string
    additionalProperties:
      type: object
      properties:
        verbatim:
          type: array
          items:
            type: object
            properties:
              text:
                type: string
                minLength: 1
              sourceRef:
                type: string
                minLength: 1
              speaker:
                type: string
                enum:
                  - client
                  - studio
                  - third-party
            required:
              - text
              - sourceRef
            additionalProperties: false
        gapRef:
          type: string
          pattern: ^GAP-[0-9]{2,}$
        internal:
          type: boolean
        ledgerRef:
          type: string
      additionalProperties: false
  gaps:
    type: array
    items:
      type: object
      properties:
        id:
          type: string
          pattern: ^GAP-[0-9]{2,}$
        what:
          type: string
          minLength: 1
        why:
          type: string
          minLength: 1
        obtainableBy:
          type: string
          enum:
            - client
            - studio
            - either
        itemType:
          type: string
          enum:
            - file
            - text
            - choice
            - approval
        choices:
          type: array
          items:
            type: string
        clientPrompt:
          type: string
        defaultIfSilent:
          type: string
          minLength: 1
        blocks:
          type: array
          items:
            type: string
        severity:
          default: post-launch
          type: string
          enum:
            - launch-blocking
            - post-launch
        ledgerRefs:
          type: array
          items:
            type: string
        evidenceRefs:
          type: array
          items:
            type: string
      required:
        - id
        - what
        - why
        - obtainableBy
        - defaultIfSilent
        - blocks
        - severity
      additionalProperties: false
  operatorDecisions:
    type: array
    items:
      type: object
      properties:
        id:
          type: string
          pattern: ^(OPD|DEF)-[0-9]{2,}$
        kind:
          type: string
          enum:
            - ruling
            - default
            - gate-verdict
        gate:
          type: string
        question:
          type: string
        recommendation:
          type: string
        answer:
          type: string
        answeredAt:
          type: string
          format: date-time
          pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
        reversible:
          type: boolean
      required:
        - id
        - kind
        - gate
        - question
        - answer
      additionalProperties: false
  voice:
    type: object
    properties:
      verbatim:
        type: array
        items:
          type: object
          properties:
            id:
              type: string
              pattern: ^VOI-[0-9]{2,}$
            text:
              type: string
            sourceRef:
              type: string
              minLength: 1
            use:
              type: string
            claimRefs:
              type: array
              items:
                type: string
          required:
            - id
            - text
            - sourceRef
            - use
          additionalProperties: false
      directives:
        type: array
        items:
          type: object
          properties:
            id:
              type: string
              pattern: ^DIR-[0-9]{2,}$
            text:
              type: string
            sourceRef:
              type: string
              minLength: 1
            appliesTo:
              type: array
              items:
                type: string
                enum:
                  - composition
                  - publication
                  - visual
                  - research
          required:
            - id
            - text
            - sourceRef
            - appliesTo
          additionalProperties: false
      profile:
        type: object
        properties:
          toneOfVoice:
            type: object
            properties:
              tone:
                type: string
              posture:
                type: string
              readingLevel:
                type: string
              avoids:
                type: array
                items:
                  type: string
              prefers:
                type: array
                items:
                  type: string
            required:
              - tone
              - posture
              - readingLevel
              - avoids
              - prefers
            additionalProperties: false
          linguisticRules:
            type: object
            propertyNames:
              type: string
              pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
            additionalProperties:
              type: array
              items:
                type: string
          culturalRules:
            type: array
            items:
              type: string
        required:
          - toneOfVoice
          - linguisticRules
          - culturalRules
        additionalProperties: false
    required:
      - verbatim
      - directives
      - profile
    additionalProperties: false
  visual:
    type: object
    properties:
      conceptId:
        type: string
      rejectedConceptIds:
        type: array
        items:
          type: string
      axes:
        type: object
        properties:
          warmth: {}
          contrast: {}
          density: {}
          typographySharpness: {}
          diagramPresence: {}
          photoStance: {}
          motionStance: {}
          textContrast: {}
          cornerRadius: {}
          borderWeight: {}
        required:
          - warmth
          - contrast
          - density
          - typographySharpness
          - diagramPresence
          - photoStance
          - motionStance
          - textContrast
          - cornerRadius
          - borderWeight
        additionalProperties: {}
      palette:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: string
      fonts:
        minItems: 1
        type: array
        items:
          type: object
          properties:
            family:
              type: string
            role:
              type: string
              enum:
                - heading
                - body
                - accent
                - mono
            source:
              type: string
            scripts:
              minItems: 1
              type: array
              items:
                type: string
                pattern: ^[A-Z][a-z]{3}$
          required:
            - family
            - role
            - source
            - scripts
          additionalProperties: false
      moodAssetRefs:
        type: array
        items:
          type: string
          pattern: ^AST-[0-9]{2,}$
      rationale:
        type: string
    required:
      - conceptId
      - axes
      - palette
      - fonts
      - rationale
    additionalProperties: false
  assets:
    type: array
    items:
      type: object
      properties:
        id:
          type: string
          pattern: ^AST-[0-9]{2,}$
        kind:
          type: string
          enum:
            - logo
            - photo
            - product-photo
            - illustration
            - mood
            - video
            - document
            - icon
        file:
          type: string
          pattern: ^assets\/[0-9a-f]{64}\.[a-z0-9]+$
        sha256:
          type: string
          pattern: ^sha256:[0-9a-f]{64}$
        mediaType:
          type: string
        width:
          type: integer
          minimum: 1
          maximum: 9007199254740991
        height:
          type: integer
          minimum: 1
          maximum: 9007199254740991
        origin:
          type: string
          enum:
            - client
            - generated
            - stock
            - studio
        rights:
          type: object
          properties:
            state:
              type: string
              enum:
                - cleared
                - client-supplied
                - generated
                - licensed-stock
                - claimed
                - unknown
            holder:
              type: string
            licence:
              type: string
            licenceUrl:
              type: string
              format: uri
            evidenceRef:
              type: string
            gapRef:
              type: string
              pattern: ^GAP-[0-9]{2,}$
            restrictions:
              type: array
              items:
                type: string
          required:
            - state
          additionalProperties: false
        generator:
          type: object
          properties:
            model:
              type: string
            promptSha256:
              type: string
              pattern: ^sha256:[0-9a-f]{64}$
            conceptId:
              type: string
            generatedAt:
              type: string
              format: date-time
              pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
          required:
            - model
            - promptSha256
            - generatedAt
          additionalProperties: false
        altText:
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: string
        subject:
          type: string
      required:
        - id
        - kind
        - file
        - sha256
        - mediaType
        - origin
        - rights
      additionalProperties: false
  provenance:
    type: object
    properties:
      producer:
        type: string
      producerVersion:
        type: string
      runId:
        type: string
      contractSnapshot:
        type: string
        pattern: ^sha256:[0-9a-f]{64}$
      inputs:
        minItems: 1
        type: array
        items:
          type: object
          properties:
            path:
              type: string
            sha256:
              type: string
              pattern: ^sha256:[0-9a-f]{64}$
            bytes:
              type: integer
              minimum: 0
              maximum: 9007199254740991
            clipped:
              type: boolean
              const: false
          required:
            - path
            - sha256
            - bytes
          additionalProperties: false
      evidenceLedger:
        type: string
        pattern: ^sha256:[0-9a-f]{64}$
      models:
        type: array
        items:
          type: object
          properties:
            step:
              type: string
            model:
              type: string
            effort:
              type: string
              enum:
                - low
                - medium
                - high
                - xhigh
                - max
                - n/a
          required:
            - step
            - model
            - effort
          additionalProperties: false
      quoteCheck:
        type: object
        properties:
          result:
            type: string
            enum:
              - pass
              - fail
          checked:
            type: integer
            minimum: 0
            maximum: 9007199254740991
          failed:
            type: number
            const: 0
        required:
          - result
          - checked
          - failed
        additionalProperties: false
      cost:
        type: object
        properties:
          currency:
            type: string
            const: USD
          total:
            type: number
            minimum: 0
          reportPath:
            type: string
            const: cost-report.json
        required:
          - currency
          - total
          - reportPath
        additionalProperties: false
    required:
      - producer
      - producerVersion
      - runId
      - contractSnapshot
      - inputs
      - evidenceLedger
      - models
      - quoteCheck
      - cost
    additionalProperties: false
required:
  - schema
  - intakeId
  - systemId
  - producedAt
  - classification
  - pbp
  - annotations
  - gaps
  - operatorDecisions
  - voice
  - visual
  - assets
  - provenance
additionalProperties: false
$defs:
  pbp-business-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: business
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      description:
        type: string
        minLength: 1
      businessModel:
        type: object
        properties:
          typeRef:
            type: string
            minLength: 1
        required:
          - typeRef
      markets:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            valueRef:
              type: string
              minLength: 1
          required:
            - valueRef
      industries:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            categoryRef:
              type: string
              minLength: 1
          required:
            - categoryRef
      yearEstablished:
        type: integer
        exclusiveMinimum: 0
        maximum: 9007199254740991
      mission:
        type: string
        minLength: 1
      brandRefs:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
          required:
            - ref
      legalIdentityRef:
        type: object
        properties:
          ref:
            type: string
            minLength: 1
          expectedType:
            type: string
            minLength: 1
        required:
          - ref
      placeRefs:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
            role:
              type: string
              minLength: 1
          required:
            - ref
      contactPointRefs:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
          required:
            - ref
      webPresenceRefs:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
          required:
            - ref
      catalogRefs:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
          required:
            - ref
      externalIdentifiers:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            schemeRef:
              type: string
              minLength: 1
            value:
              type: string
              minLength: 1
            authorityRef:
              type: string
              minLength: 1
          required:
            - schemeRef
            - value
      presentation:
        type: object
        propertyNames:
          type: string
        additionalProperties: {}
      statementByLocale: &a1
        type: object
        propertyNames:
          type: string
          pattern: ^[a-z]{2,3}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$
        additionalProperties:
          type: string
          minLength: 1
      localeNeutral: &a2
        type: boolean
    required:
      - schema
      - id
      - type
      - status
      - name
    additionalProperties: false
  pbp-legal-identity-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: legal-identity
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      legalName:
        type: string
        minLength: 1
      legalForm:
        type: object
        properties:
          valueRef:
            type: string
            minLength: 1
        required:
          - valueRef
      responsiblePerson:
        type: object
        properties:
          name:
            type: string
            minLength: 1
        required:
          - name
      registeredPlaceRef:
        type: object
        properties:
          ref:
            type: string
            minLength: 1
          expectedType:
            type: string
            minLength: 1
        required:
          - ref
      publicIdentifiers:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            status:
              type: string
              enum:
                - declared
                - derived
                - not-declared
                - not-applicable
                - unavailable
                - invalid
                - stale
                - not-comparable
            value:
              type: string
              minLength: 1
          required:
            - status
      publicRegistrations:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
          required:
            - ref
      externalIdentifiers:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            schemeRef:
              type: string
              minLength: 1
            value:
              type: string
              minLength: 1
            authorityRef:
              type: string
              minLength: 1
          required:
            - schemeRef
            - value
      presentation:
        type: object
        propertyNames:
          type: string
        additionalProperties: {}
      statementByLocale: *a1
      localeNeutral: *a2
    required:
      - schema
      - id
      - type
      - status
      - legalName
    additionalProperties: false
  pbp-offering-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: offering
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      businessRef:
        type: object
        properties:
          ref:
            type: string
            minLength: 1
          expectedType:
            type: string
            minLength: 1
        required:
          - ref
      catalogEntryRef:
        type: object
        properties:
          ref:
            type: string
            minLength: 1
          expectedType:
            type: string
            minLength: 1
        required:
          - ref
      audience:
        type: object
        properties:
          buyerTypes:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                valueRef:
                  type: string
                  minLength: 1
              required:
                - valueRef
          segments:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                valueRef:
                  type: string
                  minLength: 1
              required:
                - valueRef
      availability:
        type: object
        properties:
          mode:
            type: string
            enum:
              - declared
              - on-request
              - unavailable
          territories:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                countryCode:
                  type: string
                  minLength: 1
              required:
                - countryCode
        required:
          - mode
      package:
        type: object
        properties:
          included:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                itemRef:
                  type: object
                  properties:
                    ref:
                      type: string
                      minLength: 1
                    expectedType:
                      type: string
                      minLength: 1
                  required:
                    - ref
                inclusion:
                  type: string
                  minLength: 1
              required:
                - itemRef
                - inclusion
          allowances:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                subjectRef:
                  type: string
                  minLength: 1
                includedQuantity:
                  type: object
                  properties:
                    value:
                      type: string
                      minLength: 1
                    unitRef:
                      type: string
                      minLength: 1
                  required:
                    - value
                    - unitRef
                resetPeriod:
                  type: string
                  minLength: 1
                overageChargeRef:
                  type: string
                  minLength: 1
              required:
                - subjectRef
      pricing:
        type: object
        properties:
          currency:
            type: string
            minLength: 1
          tax:
            type: object
            propertyNames:
              type: string
            additionalProperties: {}
          charges:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                type:
                  type: string
                  enum:
                    - one-time
                    - recurring
                    - usage
                    - deposit
                purpose:
                  type: string
                  minLength: 1
                amount:
                  oneOf:
                    - type: object
                      properties:
                        model:
                          type: string
                          const: fixed
                        value:
                          type: string
                          minLength: 1
                      required:
                        - model
                        - value
                    - type: object
                      properties:
                        model:
                          type: string
                          const: range
                        minimum:
                          type: string
                          minLength: 1
                        maximum:
                          type: string
                          minLength: 1
                      required:
                        - model
                        - minimum
                        - maximum
                    - type: object
                      properties:
                        model:
                          type: string
                          const: unit-rate
                        unitValue:
                          type: string
                          minLength: 1
                      required:
                        - model
                        - unitValue
                    - type: object
                      properties:
                        model:
                          type: string
                          const: tiered
                        method:
                          type: string
                          enum:
                            - graduated
                            - volume
                        tiers:
                          type: object
                          propertyNames:
                            type: string
                          additionalProperties:
                            type: object
                            properties:
                              order:
                                type: number
                              upTo:
                                type: string
                                minLength: 1
                              above:
                                type: string
                                minLength: 1
                              unitValue:
                                type: string
                                minLength: 1
                            required:
                              - order
                              - unitValue
                      required:
                        - model
                        - method
                        - tiers
                trigger:
                  type: object
                  properties:
                    event:
                      type: string
                      minLength: 1
                  required:
                    - event
                recurrence:
                  type: string
                  minLength: 1
                basis:
                  type: object
                  properties:
                    metricRef:
                      type: string
                      minLength: 1
                    unitRef:
                      type: string
                      minLength: 1
                  required:
                    - metricRef
                    - unitRef
                refundPolicyRef:
                  type: object
                  properties:
                    ref:
                      type: string
                      minLength: 1
                    expectedType:
                      type: string
                      minLength: 1
                  required:
                    - ref
                determination:
                  type: object
                  properties:
                    method:
                      type: string
                      minLength: 1
                    beforePurchase:
                      type: boolean
                  required:
                    - method
                    - beforePurchase
              required:
                - type
                - purpose
                - amount
          externalCosts:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                purpose:
                  type: string
                  minLength: 1
                amount:
                  oneOf:
                    - type: object
                      properties:
                        model:
                          type: string
                          const: fixed
                        value:
                          type: string
                          minLength: 1
                      required:
                        - model
                        - value
                    - type: object
                      properties:
                        model:
                          type: string
                          const: cap
                        value:
                          type: string
                          minLength: 1
                      required:
                        - model
                        - value
                    - type: object
                      properties:
                        model:
                          type: string
                          const: range
                        minimum:
                          type: string
                          minLength: 1
                        maximum:
                          type: string
                          minLength: 1
                      required:
                        - model
                        - minimum
                        - maximum
                paidBy:
                  type: string
                  enum:
                    - provider
                    - client
                recurrence:
                  type: string
                  minLength: 1
                note:
                  type: string
                  minLength: 1
              required:
                - purpose
                - amount
                - paidBy
          plans:
            type: object
            propertyNames:
              type: string
            additionalProperties: {}
          adjustments:
            type: object
            propertyNames:
              type: string
            additionalProperties: {}
        required:
          - currency
      acquisition:
        type: object
        properties:
          channelRefs:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                ref:
                  type: string
                  minLength: 1
                expectedType:
                  type: string
                  minLength: 1
              required:
                - ref
      fulfillment:
        type: object
        propertyNames:
          type: string
        additionalProperties: {}
      customerResponsibilities:
        type: object
        propertyNames:
          type: string
        additionalProperties: {}
      terms:
        type: object
        propertyNames:
          type: string
        additionalProperties: {}
      policyRefs:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
          required:
            - ref
      relatedOfferings:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            relation:
              type: string
              enum:
                - optional
                - requires
                - incompatibleWith
                - alternativeTo
                - included
            offeringRef:
              type: object
              properties:
                ref:
                  type: string
                  minLength: 1
                expectedType:
                  type: string
                  minLength: 1
              required:
                - ref
            acquisition:
              type: string
              enum:
                - standalone
                - with-this-offering
                - either
            label:
              type: string
              minLength: 1
            description:
              type: string
              minLength: 1
          required:
            - relation
            - offeringRef
      limitations:
        type: object
        propertyNames:
          type: string
        additionalProperties: {}
      guarantees:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            label:
              type: string
              minLength: 1
            detail:
              type: string
              minLength: 1
          required:
            - label
            - detail
      statementByLocale: *a1
      localeNeutral: *a2
    required:
      - schema
      - id
      - type
      - status
      - name
      - businessRef
    additionalProperties: false
  pbp-claim-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: claim
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      claimClass:
        type: string
        enum:
          - comparative-commercial
          - comparative-technical
          - factual
          - risk
          - benefit
          - limitation
      claimKind:
        type: string
        enum:
          - risk
          - benefit
          - comparison
          - fact
          - limitation
          - recommendation
      subject:
        type: object
        properties:
          kind:
            type: string
            minLength: 1
          name:
            type: string
            minLength: 1
        required:
          - kind
          - name
      statement:
        type: string
        minLength: 1
      evidenceRefs:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            ref:
              type: string
              minLength: 1
            expectedType:
              type: string
              minLength: 1
          required:
            - ref
      publication:
        type: object
        properties:
          staleBehavior:
            type: string
            enum:
              - block
              - warn
              - omit
          showAsOfDate:
            type: boolean
          showEvidenceLabel:
            type: boolean
        required:
          - staleBehavior
          - showAsOfDate
          - showEvidenceLabel
      confidence:
        type: string
        enum:
          - high
          - medium
          - low
      statementLang:
        type: string
        minLength: 1
      verificationLevel:
        type: string
        enum:
          - N0
          - N1
          - N2
          - N3
      statementByLocale: *a1
      localeNeutral: *a2
    required:
      - schema
      - id
      - type
      - status
      - governance
      - claimClass
      - claimKind
      - subject
      - statement
    additionalProperties: false
  pbp-evidence-source-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: evidence-source
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      kind:
        type: string
        enum:
          - external-web-sources
          - verified-record
          - third-party-registry
          - client-statement
          - project-confirmation
          - certificate
          - operational-evidence
          - technical-assessment
      authority:
        type: object
        properties:
          kind:
            type: string
            minLength: 1
        required:
          - kind
      slug:
        type: string
        minLength: 1
      recordId:
        type: string
        minLength: 1
      version:
        type: integer
        exclusiveMinimum: 0
        maximum: 9007199254740991
      publication:
        type: object
        properties:
          visibility:
            type: string
            enum:
              - public
              - private
          publishedAt:
            type: string
            minLength: 1
        required:
          - visibility
      items:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            url:
              type: string
              minLength: 1
            retrievedAt:
              type: string
              minLength: 1
            sha256:
              type: string
              pattern: ^[a-f0-9]{64}$
            storage:
              type: string
              enum:
                - private
                - public
            mediaType:
              type: string
              minLength: 1
            qualityStatus:
              type: string
              enum:
                - unverified
                - verified
                - verified_with_quality_issue
                - changed
                - rejected
            role:
              type: string
              enum:
                - raw-result
                - report
                - screenshot
                - summary
                - methodology
            canonical:
              type: boolean
      assessment:
        type: object
        properties:
          profile:
            type: string
            const: technical-assessment
          seriesId:
            type: string
            minLength: 1
          observationId:
            type: string
            minLength: 1
          subject:
            type: object
            properties:
              url:
                type: string
                minLength: 1
              canonicalUrl:
                type: string
                minLength: 1
            required:
              - url
          provider:
            type: object
            properties:
              id:
                type: string
                minLength: 1
              name:
                type: string
                minLength: 1
              homepage:
                type: string
                minLength: 1
            required:
              - id
              - name
          tool:
            type: object
            properties:
              id:
                type: string
                minLength: 1
              name:
                type: string
                minLength: 1
              version:
                type: string
                minLength: 1
            required:
              - id
              - name
          executionMode:
            type: string
            enum:
              - operator-run
              - provider-run
          authorizationBasis:
            type: string
            enum:
              - site-owner
              - service-contract
              - explicit-operator
          observedAt:
            type: string
            minLength: 1
            pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$
          methodology:
            type: object
            properties:
              id:
                type: string
                minLength: 1
              version:
                type: string
                minLength: 1
              runCount:
                type: integer
                minimum: 1
                maximum: 9007199254740991
              aggregation:
                type: string
                enum:
                  - provider
                  - median
                  - none
            required:
              - id
              - version
              - runCount
              - aggregation
          overall:
            type: object
            properties:
              score:
                type: number
                minimum: 0
                maximum: 100
              level:
                type: string
                minLength: 1
          dimensions:
            minItems: 1
            type: array
            items:
              type: object
              properties:
                id:
                  type: string
                  minLength: 1
                providerLabel:
                  type: string
                  minLength: 1
                score:
                  type: number
                  minimum: 0
                  maximum: 100
                numerator:
                  type: number
                denominator:
                  type: number
                status:
                  type: string
                  enum:
                    - pass
                    - fail
                    - not-checked
                    - unavailable
                    - not-applicable
                level:
                  type: string
                  minLength: 1
                experimental:
                  type: boolean
                min:
                  type: number
                max:
                  type: number
                samples:
                  type: array
                  items:
                    type: number
                    minimum: 0
                    maximum: 100
              required:
                - id
                - providerLabel
          freshness:
            type: object
            properties:
              maxAgeDays:
                type: integer
                exclusiveMinimum: 0
                maximum: 9007199254740991
            required:
              - maxAgeDays
          providerReportUrl:
            type: string
            pattern: "^https:"
        required:
          - profile
          - seriesId
          - observationId
          - subject
          - provider
          - tool
          - executionMode
          - authorizationBasis
          - observedAt
          - methodology
          - dimensions
          - freshness
      display:
        type: object
        properties:
          document:
            type: string
            enum:
              - visible
              - hidden
          screenshot:
            type: string
            enum:
              - visible
              - hidden
          websiteLink:
            type: string
            enum:
              - visible
              - hidden
          hashCode:
            type: string
            enum:
              - visible
              - hidden
        required:
          - document
          - screenshot
          - websiteLink
      websiteUrl:
        type: string
        minLength: 1
      websiteScreenshot:
        type: object
        properties:
          sha256:
            type: string
            pattern: ^[a-f0-9]{64}$
          mediaType:
            type: string
            minLength: 1
          storage:
            type: string
            enum:
              - private
              - public
          url:
            type: string
            minLength: 1
          capturedAt:
            type: string
            minLength: 1
          rawArtifact:
            type: object
            properties:
              sha256:
                type: string
                pattern: ^[a-f0-9]{64}$
              mediaType:
                type: string
                minLength: 1
              originalFilename:
                type: string
                minLength: 1
              width:
                type: integer
                exclusiveMinimum: 0
                maximum: 9007199254740991
              height:
                type: integer
                exclusiveMinimum: 0
                maximum: 9007199254740991
              r2Key:
                type: string
                minLength: 1
              localPath:
                type: string
                minLength: 1
              capturedAt:
                type: string
                minLength: 1
            required:
              - sha256
              - mediaType
              - originalFilename
              - width
              - height
          aspectRatio:
            type: string
            enum:
              - landscape
              - portrait
      websiteTagline:
        type: string
        minLength: 1
      websiteFooterTagline:
        type: string
        minLength: 1
      sortOrder:
        type: integer
        minimum: -9007199254740991
        maximum: 9007199254740991
      statementByLocale: *a1
      localeNeutral: *a2
    required:
      - schema
      - id
      - type
      - status
      - name
      - kind
      - authority
    additionalProperties: false
  pbp-disclosure-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: disclosure
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      kind:
        type: string
        enum:
          - technology-dependency
          - data-processing
          - ownership-change
          - regulatory
      statement:
        type: string
        minLength: 1
      scope:
        type: object
        properties:
          offeringRefs:
            type: object
            propertyNames:
              type: string
            additionalProperties:
              type: object
              properties:
                ref:
                  type: string
                  minLength: 1
                expectedType:
                  type: string
                  minLength: 1
              required:
                - ref
      relatedPartyRef:
        type: object
        properties:
          ref:
            type: string
            minLength: 1
          expectedType:
            type: string
            minLength: 1
        required:
          - ref
      materiality:
        type: string
        enum:
          - informative
          - material
          - critical
      publication:
        type: object
        properties:
          required:
            type: boolean
        required:
          - required
      statementByLocale: *a1
      localeNeutral: *a2
    required:
      - schema
      - id
      - type
      - status
      - name
      - kind
      - statement
      - materiality
      - publication
    additionalProperties: false
  pbp-contact-point-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: contact-point
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      channel:
        type: string
        enum:
          - email
          - phone
          - form
          - chat
          - postal
      value:
        type: string
        minLength: 1
      purposes:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            valueRef:
              type: string
              minLength: 1
          required:
            - valueRef
      preferred:
        type: boolean
      languages:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: string
          minLength: 1
      statementByLocale: *a1
      localeNeutral: *a2
    required:
      - schema
      - id
      - type
      - status
      - name
      - channel
      - value
    additionalProperties: false
  pbp-brand-1:
    type: object
    properties:
      schema:
        type: string
        minLength: 1
      id:
        type: string
        minLength: 1
      type:
        type: string
        const: brand
      status:
        type: string
        enum:
          - draft
          - published
          - suspended
          - retired
          - superseded
      name:
        type: string
        minLength: 1
      summary:
        type: string
        minLength: 1
      governance:
        type: object
        properties:
          authorityRef:
            type: string
            minLength: 1
          effectiveFrom:
            type: string
            minLength: 1
          reviewedAt:
            type: string
            minLength: 1
          reviewEvery:
            type: string
            minLength: 1
          maintenanceOwnerRef:
            type: string
            minLength: 1
        required:
          - authorityRef
      canonicalUri:
        type: string
        minLength: 1
      tagline:
        type: string
        minLength: 1
      ownerBusinessRef:
        type: object
        properties:
          ref:
            type: string
            minLength: 1
          expectedType:
            type: string
            minLength: 1
        required:
          - ref
      externalIdentifiers:
        type: object
        propertyNames:
          type: string
        additionalProperties:
          type: object
          properties:
            schemeRef:
              type: string
              minLength: 1
            value:
              type: string
              minLength: 1
            authorityRef:
              type: string
              minLength: 1
          required:
            - schemeRef
            - value
      statementByLocale: *a1
      localeNeutral: *a2
    required:
      - schema
      - id
      - type
      - status
      - name
      - ownerBusinessRef
    additionalProperties: false
