---
id: CAP-PFM-ELG-013
title: Assign accountability for an area of work
feature: FEAT-PFM-ELG-04
product_area: platform
module: eligibility
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: observed
supersedes:
  - RA-ACC-0001
  - RA-ACC-0004
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - 'services-platform:docs/milestones/plans/PLAT-M15-plan.md#2. Scope'
  - >-
    services-platform:docs/proposals/responsibilities-and-attention/16-decisions.md#D-01
  - >-
    services-platform:docs/proposals/responsibilities-and-attention/16-decisions.md#D-02
purpose: >-
  Responsibilities identify who is expected to handle an area of work. That
  accountability helps attention reach useful recipients.
outcomes:
  - Responsibility areas identify primary holders and backups where needed.
  - Staff can review their areas and the reason they hold them.
  - Responsibility assignment adds no security authority.
concepts:
  - CON-PFM-ELG-004
actors:
  - ACT-PFM-007
  - ACT-PFM-013
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: platform.responsibilities.read
    where_checked: api
    scope: tenant
  - key: platform.responsibilities.manage
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-PFM-ELG-013-01
    proved_by: [ATS-PFM-ELG-013-01, TST-PFM-ELG-512]
    statement: >-
      Responsibility holdings confer no access rights and remain outside
      authorization reads.
    kind: invariant
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:tests/unit/responsibilities-not-in-authorization.spec.ts#imports
      nothing of the responsibilities module into the authorizer or the grant
      slice, and names none of its tables
    origin: >-
      services-platform:docs/proposals/responsibilities-and-attention/16-decisions.md#D-01
  - id: BR-CAP-PFM-ELG-013-02
    proved_by: [ATS-PFM-ELG-013-02, TST-PFM-ELG-492, TST-PFM-ELG-497]
    statement: >-
      The responsibility catalogue includes Platform areas and licensed
      applications’ areas, with readable scope-kind names.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#leaves
      out the definitions of an application the tenant may not use
    origin: none
  - id: BR-CAP-PFM-ELG-013-03
    proved_by: [ATS-PFM-ELG-013-03, TST-PFM-ELG-379, TST-PFM-ELG-492]
    statement: >-
      Reading responsibilities requires the baseline read permission, while
      assigning, ending and removing holdings requires sensitive management
      authority.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#refuses
      a caller with read alone, 403
    origin: none
  - id: BR-CAP-PFM-ELG-013-04
    proved_by: [ATS-PFM-ELG-013-04, TST-PFM-ELG-492, TST-PFM-ELG-493, TST-PFM-ELG-495]
    statement: >-
      Assignments accept one active customer console user or role at an allowed
      resource or workspace scope, rejecting teams, multiple subjects,
      unsupported scopes and foreign-customer users.
    kind: validation
    enforced_at:
      - api
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#refuses
      a user of another customer, naming user_id, through the wall
    origin: none
  - id: BR-CAP-PFM-ELG-013-05
    proved_by: [ATS-PFM-ELG-013-05, ATS-PFM-ELG-013-17, TST-PFM-ELG-492, TST-PFM-ELG-495]
    statement: >-
      A holder has one assignment per area, scope and overlapping validity
      period regardless of primary or backup designation, including concurrent
      attempts; other scopes, holders and nonoverlapping or ended periods remain
      valid.
    kind: invariant
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#refuses
      the same person as backup where they are primary, one holder once
    origin: none
  - id: BR-CAP-PFM-ELG-013-06
    proved_by: [ATS-PFM-ELG-013-06, ATS-PFM-ELG-013-16, TST-PFM-ELG-492, TST-PFM-ELG-495]
    statement: >-
      Repeating an assignment’s idempotency key with the same body returns the
      existing assignment; reusing it with another body is rejected without a
      write.
    kind: policy
    enforced_at:
      - api
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#refuses
      the same key with another body, 422 idempotency_key_reused, and writes
      nothing
    origin: none
  - id: BR-CAP-PFM-ELG-013-07
    proved_by: [ATS-PFM-ELG-013-07, TST-PFM-ELG-495, TST-PFM-ELG-496, TST-PFM-ELG-510]
    statement: >-
      An assignment can begin later and contributes no effective holding before
      that time, with its end required to follow its start.
    kind: validation
    enforced_at:
      - service
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#allows
      a future-dated assignment, read by nothing until it starts
    origin: none
  - id: BR-CAP-PFM-ELG-013-08
    proved_by: [ATS-PFM-ELG-013-08, ATS-PFM-ELG-013-13, ATS-PFM-ELG-013-14, ATS-PFM-ELG-014-09, ATS-PFM-ELG-015-07, TST-PFM-ELG-492, TST-PFM-ELG-495]
    statement: >-
      Ending a direct assignment at the read version also ends its delegations
      atomically; derived holdings reject manual ending and role defaults use
      removal instead.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#ends
      the assignment’s open delegations in the same transaction
    origin: none
  - id: BR-CAP-PFM-ELG-013-09
    proved_by: [ATS-PFM-ELG-013-09, TST-PFM-ELG-495, TST-PFM-ELG-501, TST-PFM-ELG-502]
    statement: >-
      Removing a role default retains a removed history row that reconciliation
      does not recreate, while a resource-specific role assignment narrows the
      default there.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#removes
      a role default, which stays as history with status removed
    origin: >-
      services-platform:docs/proposals/responsibilities-and-attention/16-decisions.md#D-02
  - id: BR-CAP-PFM-ELG-013-10
    proved_by: []
    statement: >-
      A workspace with no assignments receives its role-default holdings on
      first use before nightly reconciliation.
    kind: lifecycle
    enforced_at:
      - service
    must_prove: true
    provenance: documented
    source: 'services-platform:docs/responsibilities.md#5. The API'
    origin: none
  - id: BR-CAP-PFM-ELG-013-11
    proved_by: [ATS-PFM-ELG-013-10, TST-PFM-ELG-492, TST-PFM-ELG-496]
    statement: >-
      My Responsibilities presents current holdings and their direct, role,
      derived or cover origin, with named roles and delegations in both
      directions.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/e2e/responsibilities.e2e.spec.js#answers
      the caller’s own effective rows with via, and the delegations to and from
      them
    origin: none
  - id: BR-CAP-PFM-ELG-013-12
    proved_by: [ATS-PFM-ELG-013-11, ATS-PFM-ELG-013-15, ATS-PFM-ELG-017-15, TST-PFM-ELG-397, TST-PFM-ELG-492, TST-PFM-ELG-496]
    statement: >-
      Holder resolution selects the deepest primaries, eligible backups at that
      depth or below, permitted wider cover and delegates, falling back to
      another area only when no scope holds the requested area.
    kind: calculation
    enforced_at:
      - database
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.queries.integration.spec.js#answers
      the fallback’s holders, every one covering, when nobody holds the key at
      any sco
    origin: none
  - id: BR-CAP-PFM-ELG-013-13
    proved_by: [ATS-PFM-ELG-013-12, TST-PFM-ELG-491, TST-PFM-ELG-494]
    statement: >-
      Assignment and handover changes notify affected people, excluding
      self-actions and role defaults, and ending an assignment retracts its
      unread notice.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/notices/responsibility-notices.integration.spec.js#publishes
      nothing when the administrator assigns it to themself: they hear nothing
      for their own acts
    origin: none
  - id: BR-CAP-PFM-ELG-013-14
    proved_by: [ATS-PFM-ELG-014-12, TST-PFM-ELG-498]
    statement: >-
      Responsibility writes are audited, and assignment lists return 50 entries
      by default with a maximum of 200.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/responsibilities/tests/integration/services/persistence/assignments.integration.spec.js#audits
      the create as a responsibility_assignment, naming the fields given
    origin: none
scenarios:
  - id: SC-CAP-PFM-ELG-013-01
    given: Batch posting is an application-declared unit responsibility.
    when: The administrator assigns the Association unit to Pat.
    then: A refreshed personal view shows Pat’s direct holding.
    provenance: test
    source: >-
      react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0001.spec.ts#RA-ACC-0001
  - id: SC-CAP-PFM-ELG-013-02
    given: One person reads responsibilities and another lacks administration rights.
    when: They open personal and shared responsibility views.
    then: >-
      The reader can inspect their own holdings without assignment actions,
      while unauthorized shared settings remain absent.
    provenance: test
    source: >-
      react-console:acceptance/platform-attention/playwright/journeys/responsibilities/RA-ACC-0004.spec.ts#RA-ACC-0004
edge_cases: []
constraints: []
depends_on: []
related:
  - CAP-PFM-ELG-014
  - CAP-PFM-ELG-015
  - CAP-PFM-ELG-017
journeys:
  - JNY-PFM-ELG-004
open_questions: []
evidence:
  - >-
    services-platform: docs/responsibilities.md;
    docs/milestones/PLAT-M15-home-attention-and-responsibilities.md and
    plans/PLAT-M15-plan.md;
    docs/proposals/responsibilities-and-attention/16-decisions.md;
    aws/platform.service.ts (RESPONSIBILITIES_PERMISSIONS);
    modules/responsibilities/aws/api/responsibilities.routes.ts,
    responsibilities.schemas.ts, rules.ts, services/persistence/assignments.ts,
    definitions.ts, services/notices/responsibility-notices.ts,
    responsibilities-notifications.ts, db/responsibility-assignments.table.ts,
    responsibility-definitions.table.ts, responsibility-role-defaults.table.ts;
    tests/unit/responsibilities-not-in-authorization.spec.ts named by the docs;
    rule-level source and test references
  - >-
    react-console:
    app/(console)/console/[tenantId]/settings/responsibilities/page.tsx,
    me/responsibilities/page.tsx, components/responsibilities/**
    (responsibilities-settings.tsx, responsibility-dialogs.tsx,
    my-responsibilities.tsx), lib/responsibilities/**;
    acceptance/platform-attention/journeys/responsibilities/RA-ACC-0001, 0004
    and matching browser specifications.
controls: [TC-AVL-001, TC-AVL-002, TC-AVL-003, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, 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-007, TC-LOG-002, TC-LOG-003, TC-LOG-005, TC-MON-001, TC-MON-003, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
exercised_by: [FAS-PFM-ELG-04-01, FAS-PFM-ELG-04-02, FAS-PFM-ELG-04-03, FAS-PFM-ELG-04-04, FAS-PFM-ELG-04-05]
suites: [TST-PFM-ELG-379, TST-PFM-ELG-397, TST-PFM-ELG-491, TST-PFM-ELG-492, TST-PFM-ELG-493, TST-PFM-ELG-494, TST-PFM-ELG-495, TST-PFM-ELG-496, TST-PFM-ELG-497, TST-PFM-ELG-498, TST-PFM-ELG-501, TST-PFM-ELG-502, TST-PFM-ELG-510, TST-PFM-ELG-512]
---
# Assign accountability for an area of work

## Purpose

Responsibilities identify who is expected to handle an area of work. That accountability helps attention reach useful recipients.

## How It Works

An administrator opens responsibility settings and reviews areas by application. They select a person or role and an allowed scope. Primary and backup choices describe the holding. Dates support limited or future responsibility. Validation rejects incompatible holders and overlapping duplicates. Ending a direct holding also ends its cover. Removed role defaults remain recorded so reconciliation respects the organization’s choice. Staff inspect My Responsibilities to understand their current holdings. Notices explain assignment and handover changes. Responsibility ownership itself gives no permission to perform the underlying work.

## Relationships

Responsibility holdings provide audiences for attention and connect to temporary cover and coverage repair.
