---
id: CAP-CMT-MTG-019
title: Apply review decisions from Submissions exactly once
feature: FEAT-CMT-MTG-05
product_area: committees
module: meetings
revision: 1
status: draft
product_intent: proposed
implementation_evidence: partially-observed
supersedes:
- react-console acceptance inventory CAP-CMT-REC-016, 017, 018, 019
- react-console acceptance journeys CMT-ACC-0417, 0418, 0426
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
- services-committees:docs/milestones/CMTE-M5-openings-and-nominations.md#What is built today
purpose: What Submissions decides about a seat application, a nomination, an appointment proposal or a disclosure takes effect in Committees once, and Submissions is told.
outcomes:
- Every review decision applied exactly once
- Superseded decisions undone where they can be
- Submissions told what happened
concepts:
- CON-CMT-MTG-005
- CON-CMT-MTG-006
actors:
- ACT-CMT-012
- ACT-CMT-002
surfaces:
- job
- api
preconditions:
- Submissions delivers a version 1 decision document.
postconditions:
- Each applied decision is acknowledged to Submissions.
permissions:
- key: committees.openings.read
  where_checked: api
  scope: tenant
rules:
- id: BR-CAP-CMT-MTG-019-01
  statement: A delivered decision is applied once per decision, and a redelivery changes nothing.
  kind: invariant
  enforced_at:
  - service
  - database
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#makes no second appointment on the replay
  origin: none
- id: BR-CAP-CMT-MTG-019-02
  statement: A seat application decided appoint makes a pending appointment awaiting the applicant’s acceptance for an open or closed opening, and an applicant who is not a contact is refused.
  kind: lifecycle
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#makes a pending appointment awaiting the applicant’s acceptance, sourced from the decision
  origin: none
- id: BR-CAP-CMT-MTG-019-03
  statement: A seat application decided alternate records the applicant as an alternate on the opening, and one decided decline only records the outcome.
  kind: lifecycle
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#records the alternate on the opening
  origin: none
- id: BR-CAP-CMT-MTG-019-04
  statement: A nomination decided slate or decline is slated or declined, and an appointment proposal approved or rejected appoints or declines its pending appointment.
  kind: lifecycle
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#applies all five
  origin: none
- id: BR-CAP-CMT-MTG-019-05
  statement: An outcome the subject’s kind does not declare is refused and acknowledged as rejected by the owner, saying why.
  kind: validation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#refuses a code the kind does not declare, recorded refused
  origin: none
- id: BR-CAP-CMT-MTG-019-06
  statement: 'A superseding decision undoes the earlier one where it can: a still-pending appointment is declined, an alternate withdrawn, a slate withdrawn unless its decision carried, a declined nomination reopened; where it cannot, the supersession is refused and the earlier decision stands.'
  kind: lifecycle
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#declines the pending appointment the superseded decision made
  origin: none
- id: BR-CAP-CMT-MTG-019-07
  statement: Each decision’s acknowledgement is queued in the same step that applies it and sent afterwards, retried until Submissions takes it.
  kind: invariant
  enforced_at:
  - service
  - database
  - job
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#enqueues the acknowledgement processed, naming the appointment, in the same transaction
  origin: none
- id: BR-CAP-CMT-MTG-019-08
  statement: A decision document that is not version 1, or misses its decision or acknowledgement link, is failed naming the field.
  kind: validation
  enforced_at:
  - service
  must_prove: true
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#answers the document that is not v1 failed, naming the field
  origin: none
- id: BR-CAP-CMT-MTG-019-09
  statement: Staff read an opening’s alternates that still stand.
  kind: policy
  enforced_at:
  - api
  must_prove: false
  provenance: observed
  source: services-committees:modules/recruitment/aws/api/recruitment.routes.ts:listCommitteeOpeningAlternates
  origin: none
- id: BR-CAP-CMT-MTG-019-10
  statement: The Submissions intake and Volunteers are not deployed for Committees, so these decisions arrive only from stand-ins today.
  kind: policy
  enforced_at:
  - service
  must_prove: false
  provenance: documented
  source: services-committees:docs/milestones/CMTE-M5-openings-and-nominations.md#What is built today
  origin: none
scenarios:
- id: SC-CAP-CMT-MTG-019-01
  given: Submissions decides a seat applicant should be appointed
  when: The decision is delivered
  then: The applicant is offered the seat pending acceptance and Submissions is told it was processed
  provenance: test
  source: services-committees:modules/recruitment/tests/e2e/submissions.e2e.spec.ts#acknowledges the decision to the engine, processed, naming the appointment
edge_cases: []
constraints: []
depends_on:
- CAP-CMT-MTG-016
- CAP-CMT-MTG-018
related:
- CAP-CMT-MTG-014
journeys: []
open_questions: []
evidence:
- 'services-committees at 36129c24: submission decisions handler and lambda, decision document schema, submission consequences rule, acknowledgements outbox, submissions engine port, ledger, acknowledgements and alternates tables, CMTE-M5 record'
- 'react-console at baf6dae3: acceptance inventory CAP-CMT-REC-016 to 019 and journeys CMT-ACC-0417, 0418, 0426'
controls:
  - TC-IAM-006
  - TC-AZ-001
  - TC-AZ-002
  - TC-AZ-003
  - TC-AZ-004
  - TC-AZ-006
  - TC-TEN-001
  - TC-TEN-002
  - TC-TEN-003
  - TC-TEN-004
  - TC-SEC-001
  - TC-SEC-004
  - TC-DAT-001
  - TC-DAT-002
  - TC-DAT-003
  - TC-LOG-002
  - TC-LOG-003
  - TC-LOG-004
  - TC-LOG-005
  - TC-AVL-004
  - TC-MON-001
  - TC-MON-002
  - TC-PI-001
  - TC-PI-002
  - TC-PI-003
  - TC-PI-004
  - TC-PI-005
  - TC-PRV-001
  - TC-PRV-002
---

# Apply review decisions from Submissions exactly once

## Purpose

What Submissions decides about a seat application, a nomination, an appointment proposal or a disclosure takes effect in Committees once, and Submissions is told.

## How It Works

Submissions runs the forms behind seat applications, nominations, appointment proposals and conflict-of-interest disclosures, and delivers its review decisions to Committees. Each decision is applied once, however often it is delivered. A seat applicant decided appoint is offered the seat, pending their acceptance; one decided alternate is recorded as an alternate on the opening for staff to call on; a decline is recorded. A nomination can be slated or declined, an appointment proposal approved or rejected, and a disclosure accepted or flagged. An outcome the kind does not declare is refused rather than guessed. When Submissions changes its mind, a superseding decision undoes the earlier one where that is still possible and is refused where it is not, such as an appointment already accepted. Committees tells Submissions what happened to every decision, retrying until it is heard. Submissions is not deployed for Committees yet, so this runs only against stand-ins today.

## Relationships

- Relates to `CAP-CMT-MTG-016` because seat applications belong to an opening.
- Relates to `CAP-CMT-MTG-018` because Submissions may slate or decline a nomination.
- Relates to `CAP-CMT-MTG-014` because Submissions reviews disclosures.
