The project-level MDL/RSK rollup specs lose `addable: false` and gain
a sibling form schema (default-project-{mdl,rsk}.form.yaml) that
makes `party` a required field. + Add row on the rollup view is now
live: the user types the party name in the Package column, the
server reads `party` from the body, validates that
<project>/archive/<party>/ exists on disk, strips the field, and
writes the row into archive/<party>/<slot>/<date>-<email>.yaml. The
response Location is the synthetic <project>/<slot>/<party>__<file>.yaml
URL so the rollup table client swaps the draft URL cleanly.
Wrong party = 422 with a clear error pointing at the SSR view as the
place to create the folder first. No auto-creation here — the rollup
is for filing deliverables/risks against existing packages, not for
spinning up new ones.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
91 lines
3 KiB
YAML
91 lines
3 KiB
YAML
# Default project-rollup MDL row schema, served by zddc-server when
|
|
# no operator-supplied form.yaml exists at <project>/mdl/.
|
|
#
|
|
# Identical to the per-party MDL schema (default-mdl.form.yaml)
|
|
# except for one extra required field: `party`. That field is the
|
|
# routing key — the server reads it on POST <project>/mdl/form.html,
|
|
# finds the matching <project>/archive/<party>/ folder, and writes
|
|
# the row inside its mdl/ subfolder. The `party` value is stripped
|
|
# from the YAML on write (folder name IS the identity); on read the
|
|
# dispatcher injects it back so the rollup table can show the
|
|
# Package column.
|
|
#
|
|
# To customize: drop your own form.yaml at <project>/mdl/form.yaml.
|
|
# Keep the `party` field shape unless you also customize the rollup
|
|
# create handler — the server's routing depends on it.
|
|
|
|
title: Deliverable (project rollup)
|
|
description: One deliverable across all parties. The first field (Package) routes the row to the matching archive/<party>/mdl/ folder; the rest mirrors the per-party MDL schema.
|
|
|
|
schema:
|
|
type: object
|
|
required: [party, originator, project, discipline, type, sequence, title]
|
|
additionalProperties: false
|
|
properties:
|
|
party:
|
|
type: string
|
|
title: Package (party folder)
|
|
description: Routing key — must match an existing <project>/archive/<party>/ folder. Typical naming = MasterFormat 4-digit code + C|P + sequence digit (e.g. 0330C1).
|
|
pattern: "^[A-Za-z0-9][A-Za-z0-9.-]*$"
|
|
minLength: 1
|
|
originator:
|
|
type: string
|
|
title: Originator
|
|
description: Organizational unit responsible for this deliverable (e.g. ACME).
|
|
minLength: 1
|
|
phase:
|
|
type: string
|
|
title: Phase
|
|
description: Optional project phase code (e.g. ECI, EPC).
|
|
project:
|
|
type: string
|
|
title: Project
|
|
description: Project identifier, or your corporate placeholder for non-project deliverables.
|
|
minLength: 1
|
|
area:
|
|
type: string
|
|
title: Area
|
|
description: Optional area / budget code (e.g. B02).
|
|
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.
|
|
title:
|
|
type: string
|
|
title: Deliverable title
|
|
minLength: 1
|
|
plannedRevision:
|
|
type: string
|
|
title: Planned revision
|
|
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
|
|
notes:
|
|
type: string
|
|
title: Notes
|
|
ui:
|
|
notes:
|
|
ui:widget: textarea
|