---
id: SVC-PFM-ELG-responsibilities
title: Responsibilities Service Module
product_area: platform
module: eligibility
repository: services-platform
source_module: modules/responsibilities
revision: 1
status: draft
design_intent: confirmed
origin: >-
  Responsibilities and attention architecture D-01 to D-13 approved by Andrew
  2026-10-18 as recommended (PLAT-M15 "Decisions"); PLAT-M15 plan approved
  2026-10-21; PLAT-M23 D3 for notices
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
owns:
  - DOM-PFM-ELG-004
does_not_own:
  - >-
    Security owns permissions, roles and membership; responsibility reads grant
    nothing.
  - 'Notifications owns delivery preferences, dispatch and notice history.'
  - Attention owns the uncovered-area condition and occurrences.
  - >-
    Applications own responsibility declarations and source records for derived
    holders.
  - The job engine owns execution and workspace lifecycle coordinates deletion.
operations:
  - operation_id: getResponsibilitiesHealth
    intent: Expose the deployed responsibility build.
    access: public
    permission: >-
      none: public health route (the operation name follows the
      get<Module>Health pattern of the shared health route)
    realises:
      - CAP-PFM-ELG-013
    published_to_submissions: 'not published: build diagnostics capture no domain request'
    provenance: documented
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:healthRoute
  - operation_id: listResponsibilityDefinitions
    intent: Retrieve licensed area declarations and readable scope labels.
    access: console
    permission: platform.responsibilities.read
    realises:
      - CAP-PFM-ELG-013
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:listResponsibilityDefinitions
  - operation_id: getMyResponsibilities
    intent: >-
      Retrieve personal holdings, origins and both directions of temporary
      cover.
    access: console
    permission: platform.responsibilities.read
    realises:
      - CAP-PFM-ELG-013
      - CAP-PFM-ELG-014
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:getMyResponsibilities
  - operation_id: getEffectiveResponsibilityHolders
    intent: Resolve the effective people for an area and ordered scope chain.
    access: console
    permission: platform.responsibilities.read
    realises:
      - CAP-PFM-ELG-013
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:getEffectiveResponsibilityHolders
  - operation_id: listResponsibilityAssignments
    intent: >-
      Page holdings with area, holder, scope and status filters, defaulting to
      fifty and capped at two hundred.
    access: console
    permission: platform.responsibilities.read
    realises:
      - CAP-PFM-ELG-013
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:listResponsibilityAssignments
  - operation_id: createResponsibilityAssignment
    intent: >-
      Create scoped accountability for a person or role, with optional keyed
      replay protection.
    access: console
    permission: platform.responsibilities.manage
    realises:
      - CAP-PFM-ELG-013
      - CAP-PFM-ELG-015
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:createResponsibilityAssignment
  - operation_id: endResponsibilityAssignment
    intent: >-
      End a direct or template holding and its cover using the expected holding
      version.
    access: console
    permission: platform.responsibilities.manage
    realises:
      - CAP-PFM-ELG-013
      - CAP-PFM-ELG-015
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:endResponsibilityAssignment
  - operation_id: removeResponsibilityRoleDefault
    intent: >-
      Retain a removed role default so reconciliation cannot restore it,
      checking its expected version.
    access: console
    permission: platform.responsibilities.manage
    realises:
      - CAP-PFM-ELG-013
      - CAP-PFM-ELG-015
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:removeResponsibilityRoleDefault
  - operation_id: createResponsibilityDelegation
    intent: >-
      Create temporary cover for one personal holding as its holder or an
      authorized manager.
    access: console
    permission: >-
      platform.responsibilities.read (evaluates platform.responsibilities.manage
      and platform.responsibilities.delegate-own)
    realises:
      - CAP-PFM-ELG-014
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:createResponsibilityDelegation
  - operation_id: delegateAllMyResponsibilities
    intent: >-
      Create cover for selected own stored-active holdings under one colleague
      and window.
    access: console
    permission: platform.responsibilities.delegate-own
    realises:
      - CAP-PFM-ELG-014
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:delegateAllMyResponsibilities
  - operation_id: endResponsibilityDelegation
    intent: 'End stored-active cover as original holder, covering colleague or manager.'
    access: console
    permission: >-
      platform.responsibilities.read (evaluates platform.responsibilities.manage
      and platform.responsibilities.delegate-own)
    realises:
      - CAP-PFM-ELG-014
    published_to_submissions: 'not published: this infrastructure operation has no domain intake contract'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:endResponsibilityDelegation
  - operation_id: listUnassignedResponsibilities
    intent: Retrieve always-held areas lacking an effective workspace primary.
    access: console
    permission: platform.responsibilities.read
    realises:
      - CAP-PFM-ELG-015
    published_to_submissions: 'not published: retrieving existing information creates no domain intake'
    provenance: observed
    source: >-
      services-platform:modules/responsibilities/aws/api/responsibilities.routes.ts:listUnassignedResponsibilities
events:
  - name: 'Responsibility notices (assigned, ended, delegated, delegation confirmed)'
    direction: produced
    when: >-
      Assignment and delegation transactions publish applicable notices; default
      creation, reconcile and self-actions remain silent, and ending withdraws
      an unread assignment notice.
    payload_summary: >-
      Contains readable accountability, recipient, cover count and end, plus the
      personal responsibility destination.
  - name: Responsibility audit records
    direction: produced
    when: >-
      Holding, cover and derived synchronization changes append audit in their
      transaction.
    payload_summary: >-
      Includes the affected row, actor, changed fields and related cover
      endings.
jobs:
  - >-
    Deployment calls platform_responsibilities_registration and its bounded
    thirty-second workspace follow-up.
  - >-
    At 07:10 UTC platform_responsibilities_reconcile_scheduler submits jobs to
    platform-responsibilities-reconcile.
  - Workspace deletion invokes the responsibility participant.
integrations:
  - system: Database functions for applications and attention
    direction: inbound
    contract: >-
      Applications synchronize derived holders within their record transaction;
      effective-holder readers enforce the current workspace boundary.
  - system: Notifications
    direction: outbound
    contract: >-
      Applicable notices are persisted in the mutation transaction and dispatch
      is nudged only after commit.
  - system: Attention
    direction: outbound
    contract: >-
      Direct holding mutations attempt uncovered-area attention refresh after
      commit, without durable retry.
  - system: Security
    direction: outbound
    contract: >-
      Role membership is read to expand default holdings and is never modified
      here.
consistency:
  - rule: >-
      Direct creation, manual ending and default removal atomically apply their
      audit, gap refresh, applicable notices and cover endings.
    kind: transactional
    compensation: >-
      First-use default initialization is separate and may survive a later
      business refusal.
  - rule: Gap attention refresh follows committed holding writes.
    kind: eventual
    compensation: >-
      Failure is logged; a later successful independent 07:20 evaluation can
      repair it.
  - rule: >-
      Registration and nightly work realize declared defaults while effective
      reads expand current role membership.
    kind: eventual
    compensation: Budget-deferred workspaces wait for subsequent reconciliation.
  - rule: Derived synchronization shares the source record transaction.
    kind: transactional
    compensation: An error rolls back the caller’s business change.
  - rule: >-
      Responsibility holdings change accountability visibility without changing
      authorization.
    kind: transactional
    compensation: Import-boundary tests guard the authorizer separation.
evidence:
  - >-
    services-platform at ad3f6a6:
    modules/responsibilities/aws/api/responsibilities.routes.ts,
    responsibilities.schemas.ts; aws/lambda/*; aws/logic/*; services/**;
    db/migrations/20261019011302_responsibilities.sql; aws/platform.service.ts
    (RESPONSIBILITIES permission group); docs/responsibilities.md.
  - >-
    react-console at baf6dae: lib/responsibilities/;
    components/responsibilities/.
controls: [TC-AVL-001, TC-AVL-002, TC-AVL-003, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CHG-007, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-DAT-007, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-003, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-PRV-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---
# Responsibilities Service Module

## What This Service Is For

Responsibilities records the people expected to look after declared areas and provides scope-aware effective-holder answers.

## Boundary

It owns areas, defaults, holdings, cover and uncovered reports; permission and role membership remain in Security.

## Operations in Words

Staff can read declarations and personal accountability, managers can assign or end holdings, and permitted holders can arrange or end cover. The public health route reports deployment.

## Events and Jobs

Changes produce audits and applicable Notifications notices. Deployment follow-up and dated nightly jobs reconcile defaults and gap reporting. There is no model inference.

## Consistency Guarantees

Direct changes keep their related storage atomic, but derived synchronization leaves gap refresh to later work. Attention follow-up is best effort and the independent schedule supplies no completion deadline.
