---
id: DOM-CMT-MTG-006
title: Nomination
realises: CON-CMT-MTG-006
product_area: committees
module: meetings
revision: 3
status: draft
design_intent: proposed
implementation_evidence: inconsistent
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
owned_by: SVC-CMT-MTG-recruitment
readable_by:
  - SVC-CMT-MTG-decisions
  - SVC-PFM-QRY-queries
lifecycle: STATE-CMT-MTG-009
custom_fields: declared
identity: >-
  A nomination gets a stable identity when the candidate is put forward. A
  submission reference is optional and not globally unique to a nomination; the
  handler refuses a review linked to a different submission.
attributes:
  - name: committee and target
    kind: reference
    required: false
    computed: false
    notes: >-
      The committee is required; opening, seat and position are optional targets
      and supplied seat or opening must belong to that committee.
  - name: nominee
    kind: reference
    required: true
    computed: false
    notes: >-
      An existing contact, or a nominee name together with an e-mail address
      required by the service.
  - name: nominator
    kind: reference
    required: false
    computed: false
    notes: >-
      The portal member putting the candidate forward, omitted for staff
      nominations.
  - name: consent requested at
    kind: date
    required: false
    computed: false
    notes: >-
      The attempt time for consent notice preparation when another contact is
      nominated.
  - name: submission
    kind: reference
    required: false
    computed: false
    notes: The optional submission whose review acts on this nomination.
  - name: status
    kind: enum
    required: true
    computed: false
    notes: >-
      The candidate stage: submitted, under_review, slated, elected, declined or
      withdrawn.
  - name: slate decision
    kind: reference
    required: false
    computed: false
    notes: >-
      The optional appointment decision created when slating requires or
      requests one.
  - name: resulting appointment
    kind: reference
    required: false
    computed: true
    notes: 'The appointment created for an elected nominee, retained as a reference.'
  - name: custom fields
    kind: collection
    required: false
    computed: false
    notes: >-
      The nomination registration opts into configurable fields, forms and
      layouts, but production value persistence is not built.
relationships:
  - to: DOM-CMT-MTG-005
    cardinality: many-to-one
    ownership: >-
      The nomination owns its optional opening reference and uses the opening’s
      compatible target details.
    cross_service: false
  - to: DOM-CMT-MTG-003
    cardinality: many-to-one
    ownership: >-
      The nomination owns its slate-decision reference; a carried close links
      the appointment and marks it elected.
    cross_service: false
invariants:
  - id: INV-DOM-CMT-MTG-006-01
    statement: >-
      The service requires a contact or both nominee name and e-mail; the
      database declares the weaker contact-or-name shape check.
    enforced_at:
      - service
      - database
    provenance: observed
    source: >-
      services-committees:modules/recruitment/db/nominations.table.ts:nominations_nominee_check;
      services-committees:modules/recruitment/services/persistence/nominations.ts:columnsOf
  - id: INV-DOM-CMT-MTG-006-02
    statement: >-
      Creation checks supplied seat and opening ownership and rejects a
      dissolved committee or one that does not accept nominations.
    enforced_at:
      - service
    provenance: observed
    source: >-
      services-committees:modules/recruitment/services/persistence/nominations.ts:insertNomination
  - id: INV-DOM-CMT-MTG-006-03
    statement: >-
      The service enforces nomination moves; elected and withdrawn are final,
      and decline can reopen only through the review reversal path.
    enforced_at:
      - service
    provenance: observed
    source: >-
      services-committees:modules/recruitment/services/rules/nomination-lifecycle.ts:decideNominationAction
  - id: INV-DOM-CMT-MTG-006-04
    statement: >-
      Creating an appointment slate decision requires the nominee to be a
      contact.
    enforced_at:
      - service
    provenance: observed
    source: >-
      services-committees:modules/recruitment/services/nominations/nominations.ts:slateWithin
  - id: INV-DOM-CMT-MTG-006-05
    statement: >-
      Appointment consequences exclude nominees declined or withdrawn from that
      slate.
    enforced_at:
      - service
    provenance: observed
    source: >-
      services-committees:modules/recruitment/services/rules/slate-after-decline.ts:slateAfterDecline;
      modules/decisions/services/persistence/slated-nominations.ts:declinedNominees
  - id: INV-DOM-CMT-MTG-006-06
    statement: >-
      Withdrawal also withdraws the linked decision when it remains draft or
      open.
    enforced_at:
      - service
    provenance: observed
    source: >-
      services-committees:modules/recruitment/services/nominations/nominations.ts:withdrawWithin
  - id: INV-DOM-CMT-MTG-006-07
    statement: >-
      Staff nomination edits compare the supplied version before writing under
      the record lock.
    enforced_at:
      - service
    provenance: observed
    source: >-
      services-committees:modules/recruitment/services/persistence/nominations.ts:moveNomination
physical:
  - committees.nominations
  - committees.seen_submission_decisions
  - committees.submission_acknowledgements
evidence:
  - >-
    services-committees at 36129c24:
    modules/recruitment/db/nominations.table.ts;
    services/persistence/nominations.ts; services/nominations/nominations.ts;
    services/rules/nomination-lifecycle.ts, slate-after-decline.ts;
    services/attention/nominations-to-review.ts;
    modules/decisions/services/persistence/slated-nominations.ts;
    aws/committees.metadata.ts:nominationsObject (custom fields, forms and
    layouts declared); docs/debt/custom-field-capability-nominations.md
---
# Nomination

## What It Models

A nomination follows a candidate from being put forward through selection and, where applicable, an appointment vote. It records the link between a candidate’s recruitment history and the appointment that results. Decline and withdrawal preserve the record rather than remove the candidate’s history.

## Identity and Attributes

The candidate can be an existing contact or a named person with an e-mail address; contact identity is needed before a slate decision can appoint them. Targets are optional beyond the required committee. Slate and appointment references preserve the causal chain without copying those records.

## Relationships

A nomination may target an opening and may have a linked slate decision. A carried decision elects still-slated nominees it actually appointed. The owning recruitment service retains the links, while appointments belong to the committee module.

## Invariants

Creation verifies supplied target ownership and committee eligibility. Staff edits and moves use locks and versions. Declining or withdrawing a slate changes a pending decision appropriately, and its later close excludes candidates no longer eligible for appointment.

## How It Is Stored and Shared

Recruitment owns nominations and the shared review ledger and acknowledgement working records grouped here for storage coverage. Decisions writes elected nominations in its closing transaction. Queries exposes nominations. The metadata registration declares configurable fields, forms and layouts, but the value path remains unbuilt.

## Open Design Questions

Contact merging preserves nominee references, leaving future slates able to name a merged-away contact. Consent notices can be skipped without recovery. No production caller starts the declared review step, and configurable nomination fields still need implementation.
