---
id: SVC-CMT-MTG-decisions
title: Decision and Disclosure Service
product_area: committees
module: meetings
repository: services-committees
source_module: modules/decisions
revision: 2
status: draft
design_intent: proposed
implementation_evidence: observed
inference: []
source_sha:
  services-committees: 36129c24daeaadcdb339218c38cdeaff9861359d
owns:
  - DOM-CMT-MTG-003
  - DOM-CMT-MTG-004
does_not_own:
  - >-
    The committee module owns rule settings, roster, seats and appointments;
    consequence code uses its public business operations.
  - >-
    Meetings owns gatherings and minutes, while this code implements their
    quorum determination, approval and correction behind meeting routes.
  - >-
    Recruitment owns nominees; the carried appointment close writes their
    elected state in the same transaction.
  - >-
    Surveys & Voting owns the proposed secret-election process and
    certification, but its production port is absent.
  - >-
    Submissions owns declaration forms and reviews, and its production intake
    port is unavailable.
operations:
  - operation_id: getDecisionsHealth
    intent: Answer a public availability probe for the decisions API.
    access: public
    permission: >-
      none: the shared health route (the operation name follows the
      get<Module>Health pattern of the route library)
    realises: []
    published_to_submissions: 'not published: availability monitoring is outside submitted-data intake.'
  - operation_id: listDecisions
    intent: >-
      Browse the decision register with its filters and paging, omitting
      confidential records for non-managers.
    access: console
    permission: committees.decisions.read
    realises:
      - CAP-CMT-MTG-013
    published_to_submissions: 'not published: this read has no submitted-data input contract.'
  - operation_id: createDecision
    intent: >-
      Draft the motion, voting method and consequence inputs, optionally opening
      it in the same transaction.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: getDecision
    intent: >-
      Read the motion and its voter evidence, including conflict suggestions
      only for authorized disclosure readers.
    access: console
    permission: committees.decisions.read
    realises:
      - CAP-CMT-MTG-013
    published_to_submissions: 'not published: this read has no submitted-data input contract.'
  - operation_id: openDecision
    intent: >-
      Allocate the number and capture governing rules, seats, voters and
      attendance before preparing voter notices.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: tableDecision
    intent: Retain a draft or open motion as tabled without a voting result.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: withdrawDecision
    intent: Retain a draft or open motion as withdrawn without a voting result.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: recordDecisionVote
    intent: >-
      Insert one eligible appointment’s named vote on an open recorded method
      using an allowed channel.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: recordDecisionTally
    intent: 'Record counts, objections or a chair declaration for an open tally method.'
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: closeDecision
    intent: >-
      Evaluate an open decision and atomically commit its result and supported
      carried consequences.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
      - CAP-CMT-MTG-012
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: amendDecision
    intent: >-
      Draft a successor that names a carried original and supersedes it if the
      amendment carries.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-012
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: rescindDecision
    intent: >-
      Draft a rescinding successor with supported reversal of the original
      appointments when it carries.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-012
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: listDecisionRecusals
    intent: >-
      Read explicit recusals and permitted disclosure-based suggestions for the
      motion.
    access: console
    permission: committees.decisions.read
    realises:
      - CAP-CMT-MTG-015
    published_to_submissions: 'not published: this read has no submitted-data input contract.'
  - operation_id: recordDecisionRecusal
    intent: >-
      Record an eligible appointment standing aside from a draft or open motion
      with its reason.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-015
    published_to_submissions: >-
      not published: this staff action uses the direct governance or recruitment
      API; the publication boundary remains proposed.
  - operation_id: getPortalDecision
    intent: >-
      Return the member-authorized motion, eligibility, own participation and
      available result evidence.
    access: portal
    permission: committees.portal.participate
    realises:
      - CAP-CMT-MTG-020
    published_to_submissions: >-
      not published: the current member action uses direct authorization; an
      approved exemption from operation publication is unestablished.
  - operation_id: castPortalVote
    intent: >-
      Insert the member’s own appointment vote on an open asynchronous recorded
      decision.
    access: portal
    permission: committees.portal.participate
    realises:
      - CAP-CMT-MTG-020
    published_to_submissions: >-
      not published: the current member action uses direct authorization; an
      approved exemption from operation publication is unestablished.
  - operation_id: recordPortalRecusal
    intent: >-
      Record the member standing aside with a reason; the current portal path
      requires an open decision.
    access: portal
    permission: committees.portal.participate
    realises:
      - CAP-CMT-MTG-015
    published_to_submissions: >-
      not published: the current member action uses direct authorization; an
      approved exemption from operation publication is unestablished.
  - operation_id: listMyDecisions
    intent: >-
      Browse decisions associated with the member’s eligible appointments and
      whether they have voted.
    access: portal
    permission: committees.portal.participate
    realises:
      - CAP-CMT-MTG-020
    published_to_submissions: >-
      not published: the current member action uses direct authorization; an
      approved exemption from operation publication is unestablished.
  - operation_id: applyCertifiedElection
    intent: >-
      Apply a matching secret-election certification, ignoring a decision
      already closed.
    access: console
    permission: committees.decisions.manage
    realises:
      - CAP-CMT-MTG-010
    published_to_submissions: >-
      not published: this consumes a certified election outcome rather than form
      intake.
  - operation_id: listConflictDisclosures
    intent: >-
      Browse disclosure obligations and reviewed declarations by committee,
      contact and status filters.
    access: console
    permission: committees.disclosures.read
    realises:
      - CAP-CMT-MTG-014
    published_to_submissions: 'not published: this read has no submitted-data input contract.'
  - operation_id: getConflictDisclosure
    intent: Retrieve one authorized declaration with its available reviewed interests.
    access: console
    permission: committees.disclosures.read
    realises:
      - CAP-CMT-MTG-014
    published_to_submissions: 'not published: this read has no submitted-data input contract.'
  - operation_id: requestConflictDisclosure
    intent: >-
      Start or reuse the obligation’s Submissions form, returning an
      availability refusal for the current production port.
    access: console
    permission: committees.disclosures.manage
    realises:
      - CAP-CMT-MTG-014
    published_to_submissions: >-
      not published: this starts an owned disclosure subject form rather than
      exposing an operation binding; compliance remains proposed.
  - operation_id: listMyDisclosures
    intent: Retrieve the member’s declaration history with due status and date.
    access: portal
    permission: committees.portal.participate
    realises:
      - CAP-CMT-MTG-014
    published_to_submissions: >-
      not published: the current member action uses direct authorization; an
      approved exemption from operation publication is unestablished.
events:
  - name: committees.decision.opened
    direction: produced
    when: The motion moves from draft to open.
    payload_summary: >-
      Decision, committee and optional meeting references, number, kind, method,
      status, outcome, tally summary and optional voting deadline.
  - name: committees.decision.closed
    direction: produced
    when: 'Closure records carried, failed or no_quorum.'
    payload_summary: >-
      Decision, committee and optional meeting references, number, kind, method,
      status, outcome, tally summary and optional voting deadline.
  - name: surveys.election.certified
    direction: consumed
    when: >-
      The future ballot publisher certifies an election; only receiving code is
      present.
    payload_summary: >-
      Election and certification references with the target motion and certified
      yes, no and abstention counts.
jobs:
  - >-
    The committees_decisions_jobs hourly invocation at minute 17 closes overdue
    recorded votes, attempts one closing-soon reminder and drains owed review
    acknowledgements.
  - >-
    The committees_decisions_jobs daily invocation at 05:41 UTC creates
    disclosure obligations and attempts notices for newly inserted obligations.
  - >-
    The committees_election_certified remote receiver declares the certification
    contract; no production ballot publisher invokes it.
integrations:
  - system: Surveys & Voting
    direction: outbound
    contract: >-
      The secret-election opening port has no production implementation, so
      opening an async_secret decision is refused.
  - system: Surveys & Voting
    direction: inbound
    contract: >-
      The version-one remote certification receiver validates and applies a
      matching election result, ignoring an already closed decision.
  - system: Submissions
    direction: outbound
    contract: >-
      Form start runs outside the database transaction using a
      disclosure-specific key; the current production port returns unavailable.
  - system: Submissions
    direction: inbound
    contract: >-
      The declared reviewer-conflict database function supplies standing
      disclosure checks to Submissions; its function body is outside this
      examination.
  - system: Platform communications
    direction: outbound
    contract: >-
      Opened, closing-soon, closed and disclosure-due preparation writes
      stable-key requests in business transactions without a local recovery
      ledger.
  - system: Platform Queries
    direction: outbound
    contract: >-
      Decision and vote datasets use decision read access; disclosures use the
      sensitive disclosure read key.
  - system: Platform attention
    direction: outbound
    contract: >-
      The overdue-disclosure definition is implemented but withheld from
      delivery and sweeping.
consistency:
  - rule: >-
      Opening allocates number and snapshots and writes its event and notice
      work within the decision and committee lock boundary.
    kind: transactional
    compensation: An opening refusal rolls back these database changes.
  - rule: >-
      Closing records the result and supported owner consequences and
      predecessor supersession in one shared database transaction.
    kind: transactional
    compensation: A refused consequence rolls back closure and leaves the decision open.
  - rule: >-
      The source declares motion, result, vote and recusal freezes and
      application deletion restrictions, but the migration and grant definitions
      are not verified here.
    kind: transactional
    compensation: >-
      No implemented compensation rewrites decided records; corrections use new
      records.
  - rule: >-
      Rescission ends only supported original appointments still serving on the
      selected reversal date.
    kind: transactional
    compensation: Pending and future appointments remain for explicit staff resolution.
  - rule: >-
      Prepared decision and disclosure communications are dispatched after
      commit.
    kind: eventual
    compensation: Skipped preparation is logged without a scheduled retry ledger.
evidence:
  - >-
    services-committees at 36129c24:
    modules/decisions/aws/api/decisions.routes.ts, decisions.schemas.ts;
    aws/logic/*.ts; aws/lambda/*.ts; services/**; ports/**; db/**;
    lib/governance/*.ts
  - >-
    services-committees at 36129c24: aws/committees.service.ts (decisions,
    disclosures and portal permissions), aws/committees.communications.ts,
    aws/committees.submissions.ts
controls:
  - TC-IAM-001
  - TC-IAM-002
  - TC-IAM-004
  - TC-IAM-005
  - 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-002
  - TC-SEC-003
  - TC-SEC-004
  - TC-CRY-001
  - TC-CRY-002
  - TC-CRY-003
  - TC-CRY-004
  - TC-DAT-001
  - TC-DAT-002
  - TC-DAT-003
  - TC-DAT-007
  - TC-LOG-001
  - TC-LOG-002
  - TC-LOG-003
  - TC-LOG-004
  - TC-LOG-005
  - TC-AVL-002
  - TC-AVL-003
  - TC-AVL-004
  - TC-AVL-005
  - TC-MON-001
  - TC-MON-002
  - TC-MON-003
  - TC-PI-001
  - TC-PI-002
  - TC-PI-003
  - TC-PI-004
  - TC-PI-005
  - TC-PRV-001
  - TC-PRV-002
---
# Decision and Disclosure Service

## What This Service Is For

This service records formal committee motions, their eligible voters, votes or tally, conflicts and deterministic results. It also keeps declaration obligations and reviewed outside interests. A carried result can act on appointments, minutes or committee charter work in the shared database transaction. The service asks no model.

## Boundary

Decisions and disclosures belong here. Committee rules and appointments remain with their owner, while shared consequence code writes minutes and elected nominations across the recorded internal boundary. Secret ballots and disclosure intake depend on unavailable production ports rather than working external systems.

## Operations in Words

Staff draft, open, set aside and close motions, record named votes or tallies and propose amendment or rescission. Confidential register reads require management permission, and conflict suggestions need disclosure read access. Members use their own eligible appointments for recorded asynchronous votes and recusals. Disclosure forms are started through the owned subject boundary rather than an operation binding.

## Events and Jobs

Opening and closing record event work in the same transaction. The hourly job closes overdue recorded votes, marks one reminder attempt and drains acknowledgements; the daily job creates declaration obligations. Certification receiving code is present, though the future publisher does not exist.

## Consistency Guarantees

Opening fixes the evaluation inputs. Closure commits its supported database consequences or rolls them back together, but skipped notices can still be lost. Source declarations for frozen governance rows are retained as unverified database evidence, and publication-standard compliance is still a proposed boundary assessment.
