---
id: JNY-MBR-MEM-005
title: "A regional officer looks after the members of their region"
feature: FEAT-MBR-MEM-06
product_area: membership
module: memberships
revision: 1
status: draft
product_intent: confirmed
implementation_evidence: partially-observed
supersedes:
  - "inventory:MBR-ACC-0450"
  - "inventory:MBR-ACC-0451"
  - "inventory:MBR-ACC-0452"
  - "inventory:MBR-ACC-0460"
  - "inventory:MBR-ACC-0464"
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
actor: ACT-MBR-009
goal: "Work with exactly the members of one's region: find them, correct their details, adjust their chapters, check their dues, renew them and take a roster away."
capabilities:
  - CAP-MBR-MEM-015
  - CAP-MBR-MEM-016
  - CAP-MBR-MEM-017
  - CAP-MBR-MEM-007
screens: []
steps:
  - 'n': 1
    surface: "listMemberships"
    action: "Dana, the Eastern Regional Secretary, lists her members."
    capability: CAP-MBR-MEM-015
    expected: "Jo is listed and Sam, in San Francisco, is not."
    provenance: test
    source: "services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#lists the Eastern members for Dana: Jo, and not Sam"
  - 'n': 2
    surface: "getMembership"
    action: "Dana opens Jo's membership."
    capability: CAP-MBR-MEM-015
    expected: "Both of Jo's chapters are shown in scope."
    provenance: test
    source: "services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#reads Jo, both of whose chapters are below Eastern, in scope"
  - 'n': 3
    surface: "updateMemberContact"
    action: "Dana corrects Jo's e-mail address."
    capability: CAP-MBR-MEM-016
    expected: "CRM receives the change as Dana."
    provenance: test
    source: "services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#changes Jo’s e-mail address through CRM’s contact update, as Dana"
  - 'n': 4
    surface: "setPrimaryAffiliation"
    action: "Atlanta's officer makes Jo's Atlanta tie primary."
    capability: CAP-MBR-MEM-007
    expected: "The change is accepted."
    provenance: test
    source: "services-membership:tests/e2e/s08-cross-chapter-restrictions.e2e.spec.ts#makes the Atlanta row primary, 200"
  - 'n': 5
    surface: "getMembershipFinancialSummary"
    action: "Atlanta's officer checks Jo's dues."
    capability: CAP-MBR-MEM-016
    expected: "Only the Atlanta dues line is shown."
    provenance: test
    source: "services-membership:tests/e2e/s08-cross-chapter-restrictions.e2e.spec.ts#shows Lee only the Atlanta dues line of Jo’s financial summary"
  - 'n': 6
    surface: "renewMembership"
    action: "Atlanta's officer renews Gil, who is in grace."
    capability: CAP-MBR-MEM-016
    expected: "The renewal order is placed with the officer as acting user."
    provenance: test
    source: "services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#places the Atlanta officer’s renewal of Gil, in grace, with the officer as acting user"
  - 'n': 7
    surface: "exportRoster"
    action: "The officer exports the chapter roster."
    capability: CAP-MBR-MEM-017
    expected: "The export holds exactly the members the officer could see when asking."
    provenance: test
    source: "services-membership:tests/acceptance/security/MBR-ACC-0460.acceptance.ts#MBR-ACC-0460"
alternates:
  - from_step: 2
    condition: "Atlanta's officer, not Dana, opens Jo."
    path: "Jo is shown with her Savannah tie marked out of scope."
    outcome: "The officer can act on Atlanta only."
    provenance: test
    source: "services-membership:tests/e2e/s08-cross-chapter-restrictions.e2e.spec.ts#reads Jo, the Savannah affiliation shown and marked out of scope"
failures:
  - from_step: 3
    condition: "Dana changes Jo's date of birth, which her role does not allow."
    path: "The change is refused naming the field."
    outcome: "Nothing is sent to CRM."
    provenance: test
    source: "services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#refuses a date of birth 403 field_not_allowed, naming the field"
  - from_step: 4
    condition: "Atlanta's officer ends Jo's Savannah tie."
    path: "The change is refused as out of scope, naming Savannah."
    outcome: "Jo's ties are unchanged."
    provenance: test
    source: "services-membership:tests/e2e/s08-cross-chapter-restrictions.e2e.spec.ts#refuses ending the Savannah row 403 out_of_scope"
  - from_step: 1
    condition: "Dana's appointment has ended."
    path: "The list is refused at the next request."
    outcome: "Dana sees nothing."
    provenance: test
    source: "services-membership:tests/e2e/s12-expiring-appointment.e2e.spec.ts#refuses Lee’s roster once the exclusive valid_until has passed"
  - from_step: 2
    condition: "Dana tries to terminate Jo's term."
    path: "The request is refused before it is handled."
    outcome: "Only staff can terminate."
    provenance: test
    source: "services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#does not reach a staff operation: terminating Jo’s term is refused before the handler"
rules_in_play:
  - BR-CAP-MBR-MEM-015-03
  - BR-CAP-MBR-MEM-015-04
  - BR-CAP-MBR-MEM-015-07
  - BR-CAP-MBR-MEM-015-08
  - BR-CAP-MBR-MEM-016-01
  - BR-CAP-MBR-MEM-016-07
  - BR-CAP-MBR-MEM-017-01
assertions:
  - id: AS-JNY-MBR-MEM-005-01
    statement: "Dana never finds a member outside the Eastern Region."
    provenance: test
    source: "services-membership:tests/e2e/s07-regional-officer.e2e.spec.ts#does not find Sam, in San Francisco"
  - id: AS-JNY-MBR-MEM-005-02
    statement: "A refused contact field is named and nothing is sent to CRM."
    provenance: test
    source: "services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#refuses a field outside the list, field_not_allowed naming it, and sends nothing"
  - id: AS-JNY-MBR-MEM-005-03
    statement: "The roster export holds only the memberships captured when it was asked for."
    provenance: test
    source: "services-membership:modules/memberships/tests/integration/services/unit-scope.integration.spec.ts#writes rows for the captured memberships only, with their units on the date"
e2e_policy: optional
e2e_reason: "The officer portal screens are not built; the journey is proved through the API with signed officer contexts in process. A browser test becomes required when officers get portal screens."
evidence:
  - "services-membership at 5994c270e8a37a30f848e99ba5b5ee6b87c08893: the cited end-to-end, integration and acceptance specs and the capabilities they exercise."
  - "react-console at baf6dae382d6f41dce976c7f848667ccc37e076f: acceptance/membership/journeys (the absorbed journeys and their recorded execution)."
---

# A regional officer looks after the members of their region

## Story

Dana is the Eastern Region's secretary. She lists her members and sees only those in the region's chapters. She corrects a member's e-mail address, and is stopped when she tries a field her role does not allow. Atlanta's president works only on Atlanta's side of a member who also belongs to Savannah, sees only Atlanta's dues, renews a member in grace and exports the chapter roster. When an appointment ends, so does the access.
