---
id: ATS-CMT-MTG-019
scope: CAP-CMT-MTG-019
product_area: committees
module: meetings
revision: 1
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
- id: ATS-CMT-MTG-019-01
  title: A replayed decision changes nothing
  level: api
  proves:
  - BR-CAP-CMT-MTG-019-01
  preconditions: A seat-application decision applied once.
  steps: Deliver it again.
  expected: It answers as a duplicate; no second appointment or acknowledgement is made.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#answers the replay succeeded, a duplicate
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#makes no second appointment on the replay
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#records the decision once
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#enqueues no second acknowledgement
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#answers the replay succeeded, a duplicate
- id: ATS-CMT-MTG-019-02
  title: An appointed applicant is offered the seat
  level: api
  proves:
  - BR-CAP-CMT-MTG-019-02
  preconditions: An open opening and an applicant who is a contact.
  steps: Deliver an appoint decision.
  expected: A pending appointment sourced from the decision awaits the applicant; the applicant accepts it in the portal.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - 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
  - services-committees:modules/recruitment/tests/e2e/submissions.e2e.spec.ts#accepts it in the portal
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0417.spec.ts#CMT-ACC-0417
  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
- id: ATS-CMT-MTG-019-03
  title: Alternates and declines are recorded
  level: api
  proves:
  - BR-CAP-CMT-MTG-019-03
  preconditions: An open opening.
  steps: Deliver an alternate and a decline decision; list the opening’s alternates.
  expected: The alternate is listed; the decline changes nothing else.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#records the alternate on the opening
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#records a decline and changes nothing else
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#records the alternate on the opening
- id: ATS-CMT-MTG-019-04
  title: Every kind of decision does what it says
  level: api
  proves:
  - BR-CAP-CMT-MTG-019-04
  preconditions: A nomination, two pending appointments and two disclosures.
  steps: Deliver slate, approve, reject, accept and flag decisions.
  expected: 'All five apply: the nomination slated with the rules’ draft decision, one appointment appointed, one declined, the disclosures accepted and flagged.'
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#applies all five
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#slates the nomination
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#opens the rules’ decision of kind appointment carrying the nominee, as a draft
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#appoints the approved appointment
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#declines the rejected appointment
  - react-console:acceptance/committees/playwright/journeys/recruitment/CMT-ACC-0418.spec.ts#CMT-ACC-0418
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#applies all five
- id: ATS-CMT-MTG-019-05
  title: An undeclared outcome is refused, not guessed
  level: api
  proves:
  - BR-CAP-CMT-MTG-019-05
  preconditions: A nomination.
  steps: Deliver an outcome code nominations do not declare.
  expected: It is recorded refused and acknowledged rejected by owner with the reason.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#refuses a code the kind does not declare, recorded refused
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#acknowledges the refused decision rejected_by_owner, saying why
  - services-committees:modules/recruitment/tests/unit/services/submission-consequences.spec.ts#has none for a code the kind does not declare
  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
- id: ATS-CMT-MTG-019-06
  title: A superseding decision undoes what it can
  level: api
  proves:
  - BR-CAP-CMT-MTG-019-06
  preconditions: An applied appoint decision whose appointment is pending, and one whose appointment was accepted.
  steps: Deliver a superseding decision for each.
  expected: The pending appointment is declined and the earlier decision marked reversed; the accepted one stands and the supersession is refused.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#declines the pending appointment the superseded decision made
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#marks the superseded decision reversed by the new one
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#leaves an accepted appointment appointed when its decision is superseded
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#records the irreversible supersession refused, the earlier decision still applied
  - services-committees:modules/recruitment/tests/unit/services/submission-consequences.spec.ts#refuses to undo an appointment no longer pending
  - services-committees:modules/recruitment/tests/unit/services/submission-consequences.spec.ts#reopens a declined nomination
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#declines the pending appointment the superseded decision made
- id: ATS-CMT-MTG-019-07
  title: An acknowledgement that cannot be sent is kept and retried
  level: api
  proves:
  - BR-CAP-CMT-MTG-019-07
  preconditions: Submissions unreachable for acknowledgements.
  steps: Apply a decision; make Submissions reachable and run the hourly sweep.
  expected: The acknowledgement is kept with why, then sent and the outbox emptied.
  negative: false
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#enqueues the acknowledgement processed, naming the appointment, in the same transaction
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#keeps the acknowledgement it could not send, with why
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#leaves the outbox empty once the engine took every acknowledgement
  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
- id: ATS-CMT-MTG-019-08
  title: A malformed decision document is failed
  level: unit
  proves:
  - BR-CAP-CMT-MTG-019-08
  preconditions: Documents of version 2, of another type and missing their link.
  steps: Parse each.
  expected: Each is refused naming the field.
  negative: true
  data_needs: A committee with a seated roster in a disposable workspace
  bound_to:
  - services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#answers the document that is not v1 failed, naming the field
  - services-committees:modules/recruitment/tests/unit/services/decision-document.spec.ts#refuses version 2
  - services-committees:modules/recruitment/tests/unit/services/decision-document.spec.ts#refuses another type
  - services-committees:modules/recruitment/tests/unit/services/decision-document.spec.ts#refuses a missing acknowledgement link
  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
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'
---

# Apply review decisions from Submissions exactly once: Acceptance Test Set

## Coverage

| Rule | Proved by |
|---|---|
| `BR-CAP-CMT-MTG-019-01` | `ATS-CMT-MTG-019-01` |
| `BR-CAP-CMT-MTG-019-02` | `ATS-CMT-MTG-019-02` |
| `BR-CAP-CMT-MTG-019-03` | `ATS-CMT-MTG-019-03` |
| `BR-CAP-CMT-MTG-019-04` | `ATS-CMT-MTG-019-04` |
| `BR-CAP-CMT-MTG-019-05` | `ATS-CMT-MTG-019-05` |
| `BR-CAP-CMT-MTG-019-06` | `ATS-CMT-MTG-019-06` |
| `BR-CAP-CMT-MTG-019-07` | `ATS-CMT-MTG-019-07` |
| `BR-CAP-CMT-MTG-019-08` | `ATS-CMT-MTG-019-08` |
