# Default row schema for a Master Deliverables List entry, served by
# zddc-server when no operator-supplied form.yaml exists at
# archive/<party>/mdl/.
#
# Properties cover the default ZDDC tracking-number components
# (zddc.varasys.io/reference.html#tracking-numbers) plus the standard
# MDL metadata (title, planned revision, planned date, status, owner,
# notes). The default ships the five required components + an optional
# per-deliverable suffix; the project-wide phase / area components are
# present only as commented-out templates (see below). The schema is
# intentionally permissive on the components (free-text strings, no
# regex / enum constraints) — projects choose their own conventions,
# and a default that imposed a fixed set would just get in the way.
# Tightening per project is done via .zddc field_codes:, which the
# cascade resolves before the form is rendered.
#
# `originator` is folder-bound: the cascade's folder_fields pins it to
# the party-folder name, so the form renders it read-only and the
# server sets it from the path — the folder is its single source of
# truth.
#
# The six audit fields at the bottom are server-managed: clients must
# render them as read-only and never submit values for them.
# WriteWithHistory strips any client-supplied audit fields before
# schema validation and re-injects the authoritative values.
#
# To customize: drop your own form.yaml into archive/<party>/mdl/
# (the same directory as table.yaml). Tighten constraints with
# `enum:`, `pattern:`, `minLength:`, etc. To add the project-wide
# phase / area components, uncomment them below AND override the
# cascade's filename_format to include them — apply to EVERY
# deliverable in the project, never a subset. Add fields and they'll
# appear in the row-edit form; add a matching column to table.yaml
# to surface the field in the table view too.

title: Deliverable
description: One planned or in-flight deliverable. The first fields are components of this row's tracking number (originator is set from the party folder); the rest are deliverable metadata.

schema:
  type: object
  # originator is omitted from required: it's folder-bound — the server
  # derives it from the party-folder name (folder_fields) and the form
  # renders it read-only.
  required: [project, discipline, type, sequence, title]
  additionalProperties: false
  properties:
    # --- Tracking-number components (matches the reference doc's
    # field definitions, in order). originator / project / discipline
    # / type / sequence are the structural minimum that ships by
    # default; suffix is an optional per-deliverable part marker. The
    # project-wide phase / area components are commented out below —
    # uncomment them (and the matching .zddc filename_format) only if
    # your project uses them on EVERY deliverable.
    originator:
      type: string
      title: Originator
      description: Bound to the party-folder name — the folder is the source of truth for the originator code. Server-set and read-only; you don't edit it here.
      readOnly: true
    # phase:                          # project-wide; sits between originator and project
    #   type: string
    #   title: Phase
    #   description: Project phase code (e.g. ECI, EPC).
    #   minLength: 1
    project:
      type: string
      title: Project
      description: Project identifier, or your corporate placeholder (e.g. 000000) for non-project deliverables.
      minLength: 1
    # area:                           # project-wide; sits between project and discipline
    #   type: string
    #   title: Area
    #   description: Area / budget code (e.g. B02).
    #   minLength: 1
    discipline:
      type: string
      title: Discipline
      description: Engineering or functional group code (EL, ME, CV, PM, ...).
      minLength: 1
    type:
      type: string
      title: Document type
      description: Document category code within the discipline (SPC, DWG, RPT, ...).
      minLength: 1
    sequence:
      type: string
      title: Sequence
      description: Zero-padded integer (0001, 0042, 2623). Stored as a string so leading zeros survive YAML.
      minLength: 1
    suffix:
      type: string
      title: Suffix
      description: Optional structural-part suffix (A for Appendix A, 01 for Sheet 1). Just the letters/digits — the leading dash is added by the cascade's filename_format. Use only for parts of the SAME deliverable; separate documents get their own sequence.

    # --- Deliverable metadata.
    title:
      type: string
      title: Deliverable title
      minLength: 1
    plannedRevision:
      type: string
      title: Planned revision
      description: Issue revision label, e.g. A, B, IFR, IFC.
    plannedDate:
      type: string
      title: Planned date
      format: date
    status:
      type: string
      title: Current status
      enum: [DFT, IFR, IFA, IFC, AFC, AB]
    owner:
      type: string
      title: Owner
      description: Email or party name responsible for producing this row.
    notes:
      type: string
      title: Notes

    # --- Audit fields (server-managed; clients must not submit
    # values). WriteWithHistory strips any client-supplied versions
    # before validation and re-injects authoritative values.
    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
      description: SHA-256 (first 8 hex chars) of the prior revision's bytes.
      readOnly: true
ui:
  notes:
    ui:widget: textarea
