# Default project-rollup RSK row schema, served by zddc-server when
# no operator-supplied form.yaml exists at <project>/rsk/.
#
# Identical to the per-party RSK schema (default-rsk.form.yaml)
# except for one extra required field: `party`. The server reads it
# on POST <project>/rsk/form.html and routes the row to the matching
# <project>/archive/<party>/rsk/ folder. The `party` value is
# stripped from the YAML on write (folder name IS the identity); on
# read the dispatcher injects it back.
#
# To customize: drop your own form.yaml at <project>/rsk/form.yaml.
# Keep the `party` field shape unless you also customize the rollup
# create handler.

title: Risk (project rollup)
description: One risk across all parties. The first field (Package) routes the row to the matching archive/<party>/rsk/ folder; the rest mirrors the per-party RSK schema.

schema:
  type: object
  # `type` is intentionally absent from required: — the cascade's
  # field_defaults inject type=RSK after schema validation, and the
  # form renderer surfaces it as a locked readOnly field. Requiring
  # it here would 422 well-behaved clients that omit the cascade-
  # owned field.
  required: [party, originator, project, discipline, sequence, title]
  additionalProperties: false
  properties:
    party:
      type: string
      title: Package (party folder)
      description: Routing key — must match an existing <project>/archive/<party>/ folder.
      pattern: "^[A-Za-z0-9][A-Za-z0-9.-]*$"
      minLength: 1

    # --- Table-tracking components (same shape as the per-party rsk
    # schema). Together with `row` they compose the filename.
    originator:
      type: string
      title: Originator
      minLength: 1
    phase:
      type: string
      title: Phase
    project:
      type: string
      title: Project
      minLength: 1
    area:
      type: string
      title: Area
    discipline:
      type: string
      title: Discipline
      minLength: 1
    type:
      type: string
      title: Document type
      description: Locked to RSK by the cascade; the form renders this read-only.
      enum: [RSK]
    sequence:
      type: string
      title: Sequence
      minLength: 1
    suffix:
      type: string
      title: Suffix
    row:
      type: string
      title: Row
      description: Zero-padded sequence within the parent register. Server-assigned.
      readOnly: true

    # --- Risk-level data.
    title:
      type: string
      title: Risk
      minLength: 1
    category:
      type: string
      title: Category
    description:
      type: string
      title: Description
    likelihood:
      type: integer
      title: Likelihood
      minimum: 1
      maximum: 5
    impact:
      type: integer
      title: Impact
      minimum: 1
      maximum: 5
    severity:
      type: integer
      title: Severity
      minimum: 1
      maximum: 25
    mitigation:
      type: string
      title: Mitigation
    owner:
      type: string
      title: Owner
    status:
      type: string
      title: Status
      enum: [open, mitigated, accepted, closed]
    dueDate:
      type: string
      title: Due date
      format: date
    notes:
      type: string
      title: Notes

    # --- Audit fields (server-managed; read-only).
    created_at:
      type: string
      title: Created
      format: date-time
      readOnly: true
    created_by:
      type: string
      title: Created by
      format: email
      readOnly: true
    updated_at:
      type: string
      title: Updated
      format: date-time
      readOnly: true
    updated_by:
      type: string
      title: Updated by
      format: email
      readOnly: true
    revision:
      type: integer
      title: Revision
      minimum: 1
      readOnly: true
    previous_sha:
      type: string
      title: Previous SHA
      readOnly: true
ui:
  description:
    ui:widget: textarea
  mitigation:
    ui:widget: textarea
  notes:
    ui:widget: textarea
