---
id: SVC-MBR-STR-configuration
title: Membership Configuration Service
product_area: membership
module: structure
repository: services-membership
source_module: modules/configuration
revision: 1
status: draft
design_intent: proposed
implementation_evidence: observed
source_sha:
  services-membership: 5994c270e8a37a30f848e99ba5b5ee6b87c08893
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
inference: []
owns:
  - DOM-MBR-STR-003
  - DOM-MBR-STR-004
  - DOM-MBR-STR-006
does_not_own:
  - Application process definitions belong to the memberships module despite sharing the configuration store.
  - Configuration content history belongs to the memberships module history streams.
  - >-
    Lifecycle execution and configuration export coordination use the the memberships module participant with
    Platform workspace lifecycle coordination.
  - Shared Accounting products and prices belong to Accounting.
  - Ordering profiles and pricing audiences belong to Commerce and MOD-COM-CAT.
  - Flow-down's CRM roles and organization types belong to CRM.
  - Bulk job execution belongs to Platform import execution.
operations:
  - operation_id: listPrograms
    intent: Page through programs by identifier with optional activity and declared catalogue filters.
    access: console
    permission: membership.programs.read
    realises:
      - CAP-MBR-STR-009
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: createProgram
    intent: Create a program and submitted owned lists under its permanent identity.
    access: console
    permission: membership.programs.manage
    realises:
      - CAP-MBR-STR-009
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: getProgram
    intent: Retrieve one program with its applicable configuration lists.
    access: console
    permission: membership.programs.read
    realises:
      - CAP-MBR-STR-009
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: updateProgram
    intent: Save submitted program fields and lists at the read version while retaining omitted content.
    access: console
    permission: membership.programs.manage
    realises:
      - CAP-MBR-STR-009
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: deleteProgram
    intent: Delete an unreferenced program and its owned rows at the read version.
    access: console
    permission: membership.programs.manage
    realises:
      - CAP-MBR-STR-009
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: replaceProgramUnitTypes
    intent: >-
      Submit a program's complete affiliation requirement list at its read version, rejecting a dropped kind
      still in live use.
    access: console
    permission: membership.programs.manage
    realises:
      - CAP-MBR-STR-010
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: listMembershipTypes
    intent: Page through membership types by identifier with optional activity and declared catalogue filters.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-011
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: createMembershipType
    intent: Create a membership type and submitted owned lists under its permanent identity.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-011
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: getMembershipType
    intent: Retrieve one membership type with its applicable configuration lists.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-011
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: updateMembershipType
    intent: Save submitted membership type fields and lists at the read version while retaining omitted content.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-011
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: deleteMembershipType
    intent: Delete an unreferenced membership type and its owned rows at the read version.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-011
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: listMembershipPackages
    intent: >-
      Page through membership packages by identifier with optional activity and declared catalogue filters.
      Shared product fields and activity come from Accounting; removal retains the product.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-012
      - CAP-MBR-STR-013
      - CAP-MBR-STR-015
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: createMembershipPackage
    intent: >-
      Create a membership package and submitted owned lists under its permanent identity. Shared product
      fields and activity come from Accounting; removal retains the product.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-012
      - CAP-MBR-STR-013
      - CAP-MBR-STR-015
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: getMembershipPackage
    intent: >-
      Retrieve one membership package with its applicable configuration lists. Shared product fields and
      activity come from Accounting; removal retains the product.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-012
      - CAP-MBR-STR-013
      - CAP-MBR-STR-015
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: updateMembershipPackage
    intent: >-
      Save submitted membership package fields and lists at the read version while retaining omitted content.
      Shared product fields and activity come from Accounting; removal retains the product.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-012
      - CAP-MBR-STR-013
      - CAP-MBR-STR-015
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: deleteMembershipPackage
    intent: >-
      Delete an unreferenced membership package and its owned rows at the read version. Shared product fields
      and activity come from Accounting; removal retains the product.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-012
      - CAP-MBR-STR-013
      - CAP-MBR-STR-015
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: listStatusReasons
    intent: Page through status reasons by identifier with optional activity and declared catalogue filters.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-017
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: createStatusReason
    intent: Create a status reason and submitted owned lists under its permanent identity.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-017
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: getStatusReason
    intent: Retrieve one status reason with its applicable configuration lists.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-017
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: updateStatusReason
    intent: Save submitted status reason fields and lists at the read version while retaining omitted content.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-017
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: deleteStatusReason
    intent: Delete an unreferenced status reason and its owned rows at the read version.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-017
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: listChangePolicySets
    intent: Page through change policy sets by identifier with optional activity and declared catalogue filters.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-014
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: createChangePolicySet
    intent: Create a change policy set and submitted owned lists under its permanent identity.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-014
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: getChangePolicySet
    intent: Retrieve one change policy set with its applicable configuration lists.
    access: console
    permission: membership.configuration.read
    realises:
      - CAP-MBR-STR-014
    published_to_submissions: 'not published: configuration reading is not submitter intake'
  - operation_id: updateChangePolicySet
    intent: Save submitted change policy set fields and lists at the read version while retaining omitted content.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-014
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
  - operation_id: deleteChangePolicySet
    intent: Delete an unreferenced change policy set and its owned rows at the read version.
    access: console
    permission: membership.configuration.manage
    realises:
      - CAP-MBR-STR-014
      - CAP-MBR-STR-018
    published_to_submissions: 'not published: offering configuration requires workspace administrator authority'
events:
  - name: program
    direction: produced
    when: >-
      A content-changing create, update or deletion settles a configuration revision at commit; a version-only
      unchanged save adds no content revision.
    payload_summary: >-
      Transactional history capture includes the record and declared collections; these history-only streams
      have no reacting business subscriber.
  - name: membership_type
    direction: produced
    when: >-
      A content-changing create, update or deletion settles a configuration revision at commit; a version-only
      unchanged save adds no content revision.
    payload_summary: >-
      Transactional history capture includes the record and declared collections; these history-only streams
      have no reacting business subscriber.
  - name: membership_package
    direction: produced
    when: >-
      A content-changing create, update or deletion settles a configuration revision at commit; a version-only
      unchanged save adds no content revision.
    payload_summary: >-
      Transactional history capture includes the record and declared collections; these history-only streams
      have no reacting business subscriber.
  - name: membership_status_reason
    direction: produced
    when: >-
      A content-changing create, update or deletion settles a configuration revision at commit; a version-only
      unchanged save adds no content revision.
    payload_summary: >-
      Transactional history capture includes the record and declared collections; these history-only streams
      have no reacting business subscriber.
  - name: change_policy_set
    direction: produced
    when: >-
      A content-changing create, update or deletion settles a configuration revision at commit; a version-only
      unchanged save adds no content revision.
    payload_summary: >-
      Transactional history capture includes the record and declared collections; these history-only streams
      have no reacting business subscriber.
jobs:
  - 'Bulk declarations support insert and upsert for programs, types and packages through ordinary saves.'
  - 'Lifecycle export declarations cover programs, types, packages, change policies and status reasons.'
  - Development convergence prepares the known membership configuration.
integrations:
  - system: Accounting products
    direction: outbound
    contract: >-
      Package creation validates an existing membership-package product through the structure products port;
      reads obtain product fields from Accounting tables.
  - system: Organizational structure
    direction: outbound
    contract: Program and requirement validation reads workspace kinds and units through structure persistence.
  - system: Memberships module affiliations
    direction: outbound
    contract: Requirement replacement checks Memberships for live affiliations using a kind proposed for removal.
  - system: Term engine
    direction: outbound
    contract: Complete package and independently specified grant rules are checked using the pure term-rule validator.
consistency:
  - rule: >-
      Configuration and submitted lists commit together; updates and deletions reject a supplied stale
      version.
    kind: transactional
    compensation: Rollback leaves no partial configuration result.
  - rule: >-
      The documented product-first sequence uses a separately saved Accounting product before extension
      creation.
    kind: eventual
    compensation: No compensation removes a separately saved product after an extension refusal or deletion.
  - rule: >-
      Live Memberships consumers read current program, type and package settings, which can change later
      computations for retained memberships.
    kind: eventual
    compensation: No compensating rewrite of earlier memberships runs automatically.
  - rule: >-
      Known create and update database errors are translated after the failed transaction unwinds; store
      deletion translates dependency refusals.
    kind: transactional
    compensation: Rollback is complete before error translation.
evidence:
  - >-
    services-membership at 5994c270: modules/configuration/aws/api/configuration.routes.ts;
    aws/api/configuration-routes.ts, route-inputs.ts; services/configuration/configuration-records.ts;
    services/persistence/*.ts; services/shared/records.ts;
    services/data-operations/configuration-operations.ts; export/*.dataset.ts;
    aws/membership.change-events.ts; modules/history/db/change-event-streams.ts;
    docs/migrations/packages-as-products/README.md.
  - >-
    Submissions publication assessed against R2-ARCH-002 as cited by the landed corpus
    (services-platform:docs/standards/submission-compatible-operations.md, not readable in this job;
    FND-MBR-STR-039).
controls: [TC-AVL-002, TC-AVL-003, TC-AVL-004, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-005, TC-AZ-006, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-DAT-001, 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-MON-001, TC-MON-002, TC-MON-003, TC-MON-004, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-SEC-001, TC-SEC-004, TC-TEN-001, TC-TEN-002, TC-TEN-003]
---

# Membership Configuration Service

## What This Service Is For

Configuration describes the association's programs, classifications, sellable membership effects, status explanations and stored change policies. It supplies common identity, version and list-save handling to those records.

## Boundary

The service owns configuration records and owned lists. Memberships owns the holdings they shape, application process definitions and content history. Accounting supplies shared product identity and activity, Commerce resolves ordering and pricing context, and CRM owns the references selected for flow-down.

## Operations in Words

Program administrators maintain program records and replace affiliation requirements. Configuration administrators maintain types and flow-down, package extensions and grants, reasons and policy sets. Lists use identifier order and declared filters, including either activity value. Updates retain omitted content, and removal checks the required version and protected references.

## Events and Jobs

The configuration streams capture content history transactionally and do not publish an external business event. Programs, types and packages have bulk declarations; status reasons, policy sets and program requirements do not. Lifecycle exports describe all configuration datasets, and development seeding supplies known records.

## Consistency Guarantees

Each record save includes submitted lists and history settlement in one transaction. The documented product-first setup retains a weaker boundary with Accounting because no caller composes an atomic offering save. Live settings can change existing membership computations, while requirement removal retains a gap with concurrent affiliation additions.
