---
id: JNY-CMT-MTG-004
title: A member weighs a conflict and votes on an e-mail motion from the portal
feature: FEAT-CMT-MTG-04
product_area: committees
module: meetings
revision: 1
status: draft
product_intent: proposed
implementation_evidence: partially-observed
supersedes:
- react-console acceptance journeys CMT-ACC-0338, 0341, 0353, 0354
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
actor: ACT-CMT-005
goal: Vote on the board’s e-mail motion about a supplier contract, standing aside where a disclosed interest makes that right.
capabilities:
- CAP-CMT-MTG-014
- CAP-CMT-MTG-015
- CAP-CMT-MTG-010
- CAP-CMT-MTG-020
- CAP-CMT-MTG-011
screens: []
steps:
- n: 1
  surface: runDecisionsDaily
  action: The year’s disclosure is opened and the member told it is due
  capability: CAP-CMT-MTG-014
  expected: One disclosure per voting member for the year
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/disclosures.integration.spec.ts#opens one obligation per voting appointment
- n: 2
  surface: listMyDisclosures
  action: The member sees the disclosure due and by when
  capability: CAP-CMT-MTG-014
  expected: The disclosure shows its due date
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/disclosures.integration.spec.ts#shows the member their disclosure due, and by when, in the portal
- n: 3
  surface: committees_submission_decisions
  action: Submissions accepts the member’s disclosure naming their firm
  capability: CAP-CMT-MTG-014
  expected: The disclosure is accepted with the firm among its interests
  provenance: test
  source: services-committees:modules/recruitment/tests/integration/services/submission-decisions.integration.spec.ts#accepts the disclosure with the summary its decision’s basis carried
- n: 4
  surface: listDecisionRecusals
  action: Staff see the member suggested for recusal on the contract vote
  capability: CAP-CMT-MTG-015
  expected: The suggestion names the firm
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/disclosures.integration.spec.ts#suggests the voter whose accepted disclosure names the decision’s linked organization, and why
- n: 5
  surface: recordPortalRecusal
  action: The member recuses from the contract vote in the portal
  capability: CAP-CMT-MTG-015
  expected: The recusal is recorded and the member can no longer vote on it
  provenance: test
  source: react-console:acceptance/committees/playwright/journeys/decisions/CMT-ACC-0350.spec.ts#CMT-ACC-0350
- n: 6
  surface: castPortalVote
  action: A colleague votes on the e-mail motion in the portal
  capability: CAP-CMT-MTG-020
  expected: The vote is recorded once
  provenance: test
  source: services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#records the voter’s own vote through the portal
- n: 7
  surface: runDecisionsHourly
  action: The motion closes itself after its closing time
  capability: CAP-CMT-MTG-010
  expected: It is closed with its result, the job as recorder
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/consequences.integration.spec.ts#closes the decision past its closing time, carried 2 to 0
- n: 8
  surface: getPortalDecision
  action: The members read the result and its arithmetic
  capability: CAP-CMT-MTG-020
  expected: The tally and explanation are shown
  provenance: test
  source: services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#shows the tally and its explanation after the close
alternates:
- from_step: 4
  condition: The member’s disclosure is not yet accepted
  path: No suggestion is made
  outcome: The member may still recuse on their own
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/disclosures.integration.spec.ts#suggests nobody for a disclosure naming it that is not yet accepted
failures:
- from_step: 6
  condition: The colleague votes a second time
  path: The second vote is refused
  outcome: One vote stands
  provenance: test
  source: services-committees:modules/decisions/tests/e2e/decisions.e2e.spec.ts#refuses the voter a second vote with 409, already_voted
- from_step: 1
  condition: Submissions cannot be reached when staff start the disclosure form
  path: The request is refused saying so
  outcome: The disclosure stays owed
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/disclosures.integration.spec.ts#refuses while the engine cannot be reached, saying so
rules_in_play:
- BR-CAP-CMT-MTG-014-01
- BR-CAP-CMT-MTG-014-05
- BR-CAP-CMT-MTG-015-02
- BR-CAP-CMT-MTG-015-04
- BR-CAP-CMT-MTG-015-05
- BR-CAP-CMT-MTG-020-09
- BR-CAP-CMT-MTG-010-12
- BR-CAP-CMT-MTG-011-08
assertions:
- id: AS-JNY-CMT-MTG-004-01
  statement: A recused member’s vote is refused.
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/decisions.integration.spec.ts#refuses a recused member’s vote, 409 recused
- id: AS-JNY-CMT-MTG-004-02
  statement: Only staff holding the disclosures permission see the suggestion.
  provenance: test
  source: services-committees:modules/decisions/tests/integration/api/recusal-confidentiality.integration.spec.ts#shows the bookkeeper an open decision’s recusals without suggestions
- id: AS-JNY-CMT-MTG-004-03
  statement: The hourly sweep closes the motion once and reminds nothing more on its next run.
  provenance: test
  source: services-committees:modules/decisions/tests/integration/services/consequences.integration.spec.ts#closes and reminds nothing more on a second sweep
e2e_policy: optional
e2e_reason: The portal is not built and the Submissions intake is a stand-in, so a full browser journey cannot run; the service suites prove each hop against the API.
---

# A member weighs a conflict and votes on an e-mail motion from the portal

## Story

In January the association’s annual disclosures open, and a director sees in the portal that hers is due by the end of the month. She declares that she owns a share of a catering firm, and the review in Submissions accepts it. In March the board puts a catering contract with that firm to an e-mail vote. Staff reading the decision see her suggested for recusal, with the firm named; she recuses herself in the portal, and the product no longer lets her vote. Her colleagues vote in the portal, the motion closes itself on the hour after its closing time, and every member reads the result and its arithmetic. The portal is the last milestone to be built, so this story describes what the back end already supports.
