---
id: MOD-CRM-ENT
title: Entities
product_area: crm
module: entities
revision: 1
status: approved
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
repositories:
  - name: services-crm
    paths:
      - modules/entities
      - aws/crm.service.ts
      - docs/entities-api.md
      - docs/affiliations
      - docs/archive.md
      - docs/disconnected-information.md
      - docs/record-locks.md
      - docs/record-history.md
      - docs/milestones/CRM-M1-contacts-and-organizations.md
      - docs/milestones/CRM-M1-contacts-and-organizations.plan.md
      - docs/milestones/CRM-M2-affiliations-roles-compliance.md
      - docs/milestones/CRM-M2-affiliations-roles-compliance.plan.md
  - name: react-console
    paths:
      - 'app/(console)/console/[tenantId]/crm/contacts'
      - 'app/(console)/console/[tenantId]/crm/organizations'
      - components/forms/contacts
      - components/affiliations
      - components/record-views/cards/contact
      - acceptance/crm/inventory
      - acceptance/crm/journeys/contacts
      - acceptance/crm/journeys/organizations
      - acceptance/crm/journeys/affiliations
      - components/contact-editor
      - lib/affiliations
      - components/console/organization
      - components/configuration
      - acceptance/crm/playwright
owns:
  - >-
    Contacts (crm.contacts) and their e-mail addresses, phone numbers,
    addresses, communication preferences and custom field values
  - >-
    Organizations (crm.organizations) and their addresses, phone numbers and
    custom field values
  - Contact organization affiliations and the roles held on them
  - 'Contact roles, affiliation types and their default contact-information links'
  - >-
    Contact types, organization types (with their compliance rules and notice),
    address types and phone number types
  - >-
    Organization contact role compliance: violations, reprocess runs and the
    notice
  - 'Record locks and their audit, protected system records'
  - Record revisions of contacts and organizations
  - >-
    CRM settings: default page layouts and forms, the default affiliation type,
    the date-reconciliation watermark
  - Contact photo and organization logo references
does_not_own:
  - record: 'Duplicate rules, duplicate candidates and merges'
    owner: MOD-CRM-DQ (Data Quality)
  - record: Activities and tasks
    owner: MOD-CRM-ACT (Activities and Tasks)
  - record: Regions and automatic region assignment
    owner: MOD-CRM-REG (Regions)
  - record: 'Bulk data jobs, imports and the job reconciler'
    owner: Platform (Data Job Engine)
  - record: 'Workspace provisioning, seeds and purge'
    owner: Platform (workspace lifecycle)
  - record: 'Custom field definitions, page layout and form definitions'
    owner: Platform (metadata)
  - record: 'Roles, policies, permission evaluation and application access'
    owner: Platform (security)
  - record: 'Record stamps, user display names, Quick Search and dataset queries'
    owner: Platform
  - record: 'E-mail templates, communication requests and sending'
    owner: Platform (communications)
  - record: File storage and the asset pipeline
    owner: Platform (files)
hosted_screens:
  - route: '/console/{tenantId}/crm/contacts'
    purpose: Contacts list
  - route: '/console/{tenantId}/crm/contacts/new'
    purpose: Contact type chooser and create form
  - route: '/console/{tenantId}/crm/contacts/{id}'
    purpose: Contact 360
  - route: '/console/{tenantId}/crm/contacts/{id}/edit'
    purpose: 'Contact editor, including the Affiliations section and roles'
  - route: '/console/{tenantId}/crm/organizations'
    purpose: Organizations list
  - route: '/console/{tenantId}/crm/organizations/new'
    purpose: Organization create form
  - route: '/console/{tenantId}/crm/organizations/{id}'
    purpose: Organization 360 with its Contacts tab and compliance status
  - route: '/console/{tenantId}/configuration/crm/types/contactRoles'
    purpose: Contact roles list and editor
  - route: '/console/{tenantId}/configuration/crm/types/affiliationTypes'
    purpose: 'Affiliation types list, editor and default type setting'
  - route: '/console/{tenantId}/configuration/crm/types/{collection}'
    purpose: 'Contact, organization, address and phone number type lists and editors'
evidence:
  - >-
    Services evidence comes from the charter’s registered scope at
    `7ea48a414c42eade10d60753b8bcc323b1dd726f`. Route declarations, schemas,
    services, tables and cited test assertions support the capability rules.
    Calls to neighboring modules establish dependency names only.
  - >-
    Console evidence comes from the corrected registry scope at
    `da63075876b2c5f4a6af07d457bb24ea8bf4c0c7`. The examination reads cited
    browser assertions and component behavior. Inventory entries seed permanent
    supersession references; their automation flags do not establish current
    proof.
coverage_catalog: >-
  The examination report distinguishes static evidence from executed validation.
  Existing bindings do not establish that product tests pass at these commits.


  ### Coverage against the code at the pinned commit


  | Measure | Covered | Ratio |

  |---|---|---|

  | HTTP operations declared literally in `aws/api/*.routes.ts` (brief's
  denominator 52, FND-CRM-ENT-015) | 53 of 53 | 53/53 |

  | HTTP operations including those the shared factories generate | 91 of 91 |
  91/91 |

  | Tables in `db/*.table.ts`, each named in a capability's evidence | 26 of 26
  | 26/26 |

  | Permission keys of the eight groups, mapped to capability or dependency
  evidence | 57 of 57 | 57/57 |

  | E2E specification files in `tests/e2e/` (26 files: 25 specifications and one
  helper) | 25 of 25 | 25/25 |

  | Acceptance inventory capabilities of CON, ORG, AFF named in a `supersedes` |
  44 of 44 | 44/44 |


  ### Operations by capability


  | Operation | Capability |

  |---|---|

  | `archiveContact` | `CAP-CRM-ENT-013` |

  | `archiveOrganization` | `CAP-CRM-ENT-013` |

  | `createAddressType` | `CAP-CRM-ENT-018` |

  | `createAffiliationType` | `CAP-CRM-ENT-017` |

  | `createContact` | `CAP-CRM-ENT-001` |

  | `createContactRole` | `CAP-CRM-ENT-017` |

  | `createContactType` | `CAP-CRM-ENT-018` |

  | `createOrganization` | `CAP-CRM-ENT-002` |

  | `createOrganizationType` | `CAP-CRM-ENT-018` |

  | `createPhoneNumberType` | `CAP-CRM-ENT-018` |

  | `deleteAddressType` | `CAP-CRM-ENT-018` |

  | `deleteAffiliationType` | `CAP-CRM-ENT-017` |

  | `deleteContact` | `CAP-CRM-ENT-014` |

  | `deleteContactRole` | `CAP-CRM-ENT-017` |

  | `deleteContactType` | `CAP-CRM-ENT-018` |

  | `deleteOrganization` | `CAP-CRM-ENT-014` |

  | `deleteOrganizationType` | `CAP-CRM-ENT-018` |

  | `deletePhoneNumberType` | `CAP-CRM-ENT-018` |

  | `getAddressType` | `CAP-CRM-ENT-018` |

  | `getAffiliationType` | `CAP-CRM-ENT-017` |

  | `getContact` | `CAP-CRM-ENT-003` |

  | `getContactMailingAddress` | `CAP-CRM-ENT-005` |

  | `getContactRevision` | `CAP-CRM-ENT-016` |

  | `getContactRole` | `CAP-CRM-ENT-017` |

  | `getContactType` | `CAP-CRM-ENT-018` |

  | `getCrmSettings` | `CAP-CRM-ENT-019` |

  | `getEffectiveDefinitions` | `CAP-CRM-ENT-019` |

  | `getMergedContactRevision` | `CAP-CRM-ENT-016` |

  | `getOrganization` | `CAP-CRM-ENT-003` |

  | `getOrganizationRevision` | `CAP-CRM-ENT-016` |

  | `getOrganizationType` | `CAP-CRM-ENT-018` |

  | `getPhoneNumberType` | `CAP-CRM-ENT-018` |

  | `listAddressTypes` | `CAP-CRM-ENT-018` |

  | `listAffiliationTypes` | `CAP-CRM-ENT-017` |

  | `listContactHistory` | `CAP-CRM-ENT-016` |

  | `listContactHistoryActors` | `CAP-CRM-ENT-016` |

  | `listContactLockChanges` | `CAP-CRM-ENT-015` |

  | `listContactRoleLockChanges` | `CAP-CRM-ENT-015` |

  | `listContactRoles` | `CAP-CRM-ENT-017` |

  | `listContactTypes` | `CAP-CRM-ENT-018` |

  | `listContacts` | `CAP-CRM-ENT-003` |

  | `listMergedContactHistory` | `CAP-CRM-ENT-016` |

  | `listMergedContactHistoryActors` | `CAP-CRM-ENT-016` |

  | `listOrganizationAffiliations` | `CAP-CRM-ENT-009` |

  | `listOrganizationHistory` | `CAP-CRM-ENT-016` |

  | `listOrganizationHistoryActors` | `CAP-CRM-ENT-016` |

  | `listOrganizationLockChanges` | `CAP-CRM-ENT-015` |

  | `listOrganizationTypes` | `CAP-CRM-ENT-018` |

  | `listOrganizations` | `CAP-CRM-ENT-003` |

  | `listPhoneNumberTypes` | `CAP-CRM-ENT-018` |

  | `lockContact` | `CAP-CRM-ENT-015` |

  | `lockContactRole` | `CAP-CRM-ENT-015` |

  | `lockOrganization` | `CAP-CRM-ENT-015` |

  | `patchAddressType` | `CAP-CRM-ENT-018` |

  | `patchAffiliationType` | `CAP-CRM-ENT-017` |

  | `patchContact` | `CAP-CRM-ENT-004` |

  | `patchContactRole` | `CAP-CRM-ENT-017` |

  | `patchContactType` | `CAP-CRM-ENT-018` |

  | `patchCrmSettings` | `CAP-CRM-ENT-019` |

  | `patchOrganization` | `CAP-CRM-ENT-004` |

  | `patchOrganizationType` | `CAP-CRM-ENT-018` |

  | `patchPhoneNumberType` | `CAP-CRM-ENT-018` |

  | `previewContactRoleComplianceEmail` | `CAP-CRM-ENT-012` |

  | `reconcileAffiliationDates` | `CAP-CRM-ENT-010` |

  | `recursivelyListContactsForOrganizationId` | `CAP-CRM-ENT-003` |

  | `relinkContactAddress` | `CAP-CRM-ENT-006` |

  | `relinkContactPhoneNumber` | `CAP-CRM-ENT-006` |

  | `removeContactAddress` | `CAP-CRM-ENT-006` |

  | `removeContactPhoneNumber` | `CAP-CRM-ENT-006` |

  | `renderEmailPreview` | `CAP-CRM-ENT-012` |

  | `reorderAddressTypes` | `CAP-CRM-ENT-018` |

  | `reorderContactRoles` | `CAP-CRM-ENT-017` |

  | `reorderContactTypes` | `CAP-CRM-ENT-018` |

  | `reorderOrganizationTypes` | `CAP-CRM-ENT-018` |

  | `reorderPhoneNumberTypes` | `CAP-CRM-ENT-018` |

  | `reprocessCompliance` | `CAP-CRM-ENT-012` |

  | `unarchiveContact` | `CAP-CRM-ENT-013` |

  | `unarchiveOrganization` | `CAP-CRM-ENT-013` |

  | `unlockContact` | `CAP-CRM-ENT-015` |

  | `unlockContactRole` | `CAP-CRM-ENT-015` |

  | `unlockOrganization` | `CAP-CRM-ENT-015` |

  | `updateAddressType` | `CAP-CRM-ENT-018` |

  | `updateAffiliationType` | `CAP-CRM-ENT-017` |

  | `updateContact` | `CAP-CRM-ENT-004` |

  | `updateContactRole` | `CAP-CRM-ENT-017` |

  | `updateContactType` | `CAP-CRM-ENT-018` |

  | `updateOrganization` | `CAP-CRM-ENT-004` |

  | `updateOrganizationType` | `CAP-CRM-ENT-018` |

  | `updatePhoneNumberType` | `CAP-CRM-ENT-018` |

  | `verifyContactAddress` | `CAP-CRM-ENT-006` |

  | `verifyContactPhoneNumber` | `CAP-CRM-ENT-006` |


  ### Tables by capability


  | Table file | Capabilities |

  |---|---|

  | `address-types.table.ts` | `CAP-CRM-ENT-018` |

  | `affiliation-type-contact-info-defaults.table.ts` | `CAP-CRM-ENT-017` |

  | `affiliation-types.table.ts` | `CAP-CRM-ENT-017` |

  | `compliance-reprocesses.table.ts` | `CAP-CRM-ENT-012` |

  | `contact-addresses.table.ts` | `CAP-CRM-ENT-005`, `CAP-CRM-ENT-006` |

  | `contact-communication-preferences.table.ts` | `CAP-CRM-ENT-007` |

  | `contact-custom-field-values.table.ts` | `CAP-CRM-ENT-008` |

  | `contact-email-addresses.table.ts` | `CAP-CRM-ENT-005` |

  | `contact-organization-affiliations.table.ts` | `CAP-CRM-ENT-009` |

  | `contact-organization-roles.table.ts` | `CAP-CRM-ENT-011` |

  | `contact-phone-numbers.table.ts` | `CAP-CRM-ENT-005`, `CAP-CRM-ENT-006` |

  | `contact-roles.table.ts` | `CAP-CRM-ENT-017` |

  | `contact-types.table.ts` | `CAP-CRM-ENT-018` |

  | `contacts.table.ts` | `CAP-CRM-ENT-001`, `CAP-CRM-ENT-007` |

  | `crm-settings.table.ts` | `CAP-CRM-ENT-010`, `CAP-CRM-ENT-019` |

  | `managed-assets.table.ts` | `CAP-CRM-ENT-001`, `CAP-CRM-ENT-002` |

  | `organization-addresses.table.ts` | `CAP-CRM-ENT-005` |

  | `organization-compliance-violations.table.ts` | `CAP-CRM-ENT-012` |

  | `organization-custom-field-values.table.ts` | `CAP-CRM-ENT-008` |

  | `organization-phone-numbers.table.ts` | `CAP-CRM-ENT-005` |

  | `organization-types.table.ts` | `CAP-CRM-ENT-018` |

  | `organizations.table.ts` | `CAP-CRM-ENT-002` |

  | `phone-number-types.table.ts` | `CAP-CRM-ENT-018` |

  | `protected-records.table.ts` | `CAP-CRM-ENT-015` |

  | `record-lock-changes.table.ts` | `CAP-CRM-ENT-015` |

  | `record-revisions.table.ts` | `CAP-CRM-ENT-016` |


  ### E2E specifications by capability


  | Spec file | Capabilities |

  |---|---|

  | `address-types.e2e.spec.js` | `CAP-CRM-ENT-018` |

  | `affiliation-date-reconciliation.e2e.spec.js` | `CAP-CRM-ENT-010` |

  | `affiliation-types.e2e.spec.js` | `CAP-CRM-ENT-017` |

  | `application-access-enforced.e2e.spec.js` | `CAP-CRM-ENT-003` |

  | `archive.e2e.spec.js` | `CAP-CRM-ENT-013` |

  | `contact-affiliations.e2e.spec.js` | `CAP-CRM-ENT-009` |

  | `contact-information-sources.e2e.spec.js` | `CAP-CRM-ENT-006`,
  `CAP-CRM-ENT-009` |

  | `contact-roles.e2e.spec.js` | `CAP-CRM-ENT-008`, `CAP-CRM-ENT-017` |

  | `contact-types.e2e.spec.js` | `CAP-CRM-ENT-018` |

  | `contacts-custom-fields.e2e.spec.js` | `CAP-CRM-ENT-008` |

  | `contacts-disconnected.e2e.spec.js` | `CAP-CRM-ENT-006` |

  | `contacts-history.e2e.spec.js` | `CAP-CRM-ENT-014`, `CAP-CRM-ENT-016` |

  | `contacts-names.e2e.spec.js` | `CAP-CRM-ENT-001` |

  | `contacts.e2e.spec.js` | `CAP-CRM-ENT-001`, `CAP-CRM-ENT-003`,
  `CAP-CRM-ENT-004`, `CAP-CRM-ENT-005`, `CAP-CRM-ENT-014`, `CAP-CRM-ENT-015` |

  | `display-links.e2e.spec.js` | `CAP-CRM-ENT-003` |

  | `email-previews.e2e.spec.js` | `CAP-CRM-ENT-012` |

  | `organization-compliance.e2e.spec.js` | `CAP-CRM-ENT-012` |

  | `organization-types.e2e.spec.js` | `CAP-CRM-ENT-002`, `CAP-CRM-ENT-012`,
  `CAP-CRM-ENT-018` |

  | `organizations-custom-fields.e2e.spec.js` | `CAP-CRM-ENT-008` |

  | `organizations-domain-name.e2e.spec.js` | `CAP-CRM-ENT-002` |

  | `organizations-history.e2e.spec.js` | `CAP-CRM-ENT-016` |

  | `organizations.e2e.spec.js` | `CAP-CRM-ENT-002`, `CAP-CRM-ENT-003`,
  `CAP-CRM-ENT-004`, `CAP-CRM-ENT-014`, `CAP-CRM-ENT-015` |

  | `page-layouts.e2e.spec.js` | `CAP-CRM-ENT-019` |

  | `phone-number-types.e2e.spec.js` | `CAP-CRM-ENT-018` |

  | `platform-scope.e2e.spec.js` | `CAP-CRM-ENT-003` |


  ### Published permission keys


  Published keys are catalog coverage. Bulk, merge and query keys name
  dependencies or findings rather than an Entities route enforcement claim.


  | Permission key | Capability or evidence home |

  |---|---|

  | `crm.contacts.read` | CAP-CRM-ENT-003, CAP-CRM-ENT-005, CAP-CRM-ENT-007,
  CAP-CRM-ENT-008, CAP-CRM-ENT-009, CAP-CRM-ENT-010, CAP-CRM-ENT-012,
  CAP-CRM-ENT-015, CAP-CRM-ENT-016, CAP-CRM-ENT-019 |

  | `crm.contacts.create` | CAP-CRM-ENT-001 |

  | `crm.contacts.update` | CAP-CRM-ENT-004, CAP-CRM-ENT-005, CAP-CRM-ENT-006,
  CAP-CRM-ENT-007, CAP-CRM-ENT-008, CAP-CRM-ENT-009, CAP-CRM-ENT-011 |

  | `crm.contacts.delete` | CAP-CRM-ENT-014 |

  | `crm.contacts.bulk` | MOD-CRM-DJ dependency; CAP-CRM-ENT-001 evidence |

  | `crm.contacts.query` | Platform dependency; CAP-CRM-ENT-003 evidence |

  | `crm.contacts.history` | CAP-CRM-ENT-016 |

  | `crm.contacts.merge` | MOD-CRM-DQ dependency; CAP-CRM-ENT-003 evidence |

  | `crm.contacts.create-despite-duplicate-block` | CAP-CRM-ENT-001 |

  | `crm.contacts.lock` | CAP-CRM-ENT-015 |

  | `crm.contacts.unlock` | CAP-CRM-ENT-004, CAP-CRM-ENT-015 |

  | `crm.contacts.archive` | CAP-CRM-ENT-013 |

  | `crm.organizations.read` | CAP-CRM-ENT-003, CAP-CRM-ENT-008,
  CAP-CRM-ENT-009, CAP-CRM-ENT-012, CAP-CRM-ENT-015, CAP-CRM-ENT-016,
  CAP-CRM-ENT-019 |

  | `crm.organizations.create` | CAP-CRM-ENT-002 |

  | `crm.organizations.update` | CAP-CRM-ENT-004, CAP-CRM-ENT-005,
  CAP-CRM-ENT-006, CAP-CRM-ENT-008, CAP-CRM-ENT-012 |

  | `crm.organizations.delete` | CAP-CRM-ENT-014 |

  | `crm.organizations.bulk` | MOD-CRM-DJ dependency; CAP-CRM-ENT-002 evidence |

  | `crm.organizations.query` | Platform dependency; CAP-CRM-ENT-003 evidence |

  | `crm.organizations.history` | CAP-CRM-ENT-016 |

  | `crm.organizations.merge` | MOD-CRM-DQ dependency; CAP-CRM-ENT-003 evidence
  |

  | `crm.organizations.create-despite-duplicate-block` | CAP-CRM-ENT-002 |

  | `crm.organizations.lock` | CAP-CRM-ENT-015 |

  | `crm.organizations.unlock` | CAP-CRM-ENT-004, CAP-CRM-ENT-015 |

  | `crm.organizations.archive` | CAP-CRM-ENT-013 |

  | `crm.contact-roles.read` | CAP-CRM-ENT-011, CAP-CRM-ENT-015, CAP-CRM-ENT-017
  |

  | `crm.contact-roles.create` | CAP-CRM-ENT-017 |

  | `crm.contact-roles.update` | CAP-CRM-ENT-017 |

  | `crm.contact-roles.delete` | CAP-CRM-ENT-017 |

  | `crm.contact-roles.bulk` | FND-CRM-ENT-013; CAP-CRM-ENT-017 evidence |

  | `crm.contact-roles.lock` | CAP-CRM-ENT-015 |

  | `crm.contact-roles.unlock` | CAP-CRM-ENT-015 |

  | `crm.contact-types.read` | CAP-CRM-ENT-001, CAP-CRM-ENT-018 |

  | `crm.contact-types.create` | CAP-CRM-ENT-018 |

  | `crm.contact-types.update` | CAP-CRM-ENT-018 |

  | `crm.contact-types.delete` | CAP-CRM-ENT-018 |

  | `crm.contact-types.bulk` | FND-CRM-ENT-013; CAP-CRM-ENT-018 evidence |

  | `crm.organization-types.read` | CAP-CRM-ENT-002, CAP-CRM-ENT-018 |

  | `crm.organization-types.create` | CAP-CRM-ENT-018 |

  | `crm.organization-types.update` | CAP-CRM-ENT-012, CAP-CRM-ENT-018 |

  | `crm.organization-types.delete` | CAP-CRM-ENT-018 |

  | `crm.organization-types.bulk` | FND-CRM-ENT-013; CAP-CRM-ENT-018 evidence |

  | `crm.affiliation-types.read` | CAP-CRM-ENT-009, CAP-CRM-ENT-017 |

  | `crm.affiliation-types.create` | CAP-CRM-ENT-017 |

  | `crm.affiliation-types.update` | CAP-CRM-ENT-017 |

  | `crm.affiliation-types.delete` | CAP-CRM-ENT-017 |

  | `crm.affiliation-types.bulk` | FND-CRM-ENT-013; CAP-CRM-ENT-017 evidence |

  | `crm.affiliation-types.set-default` | CAP-CRM-ENT-017 |

  | `crm.address-types.read` | CAP-CRM-ENT-005, CAP-CRM-ENT-018 |

  | `crm.address-types.create` | CAP-CRM-ENT-018 |

  | `crm.address-types.update` | CAP-CRM-ENT-018 |

  | `crm.address-types.delete` | CAP-CRM-ENT-018 |

  | `crm.address-types.bulk` | FND-CRM-ENT-013; CAP-CRM-ENT-018 evidence |

  | `crm.phone-number-types.read` | CAP-CRM-ENT-005, CAP-CRM-ENT-018 |

  | `crm.phone-number-types.create` | CAP-CRM-ENT-018 |

  | `crm.phone-number-types.update` | CAP-CRM-ENT-018 |

  | `crm.phone-number-types.delete` | CAP-CRM-ENT-018 |

  | `crm.phone-number-types.bulk` | FND-CRM-ENT-013; CAP-CRM-ENT-018 evidence |


  The remaining E2E file, `e2e-security.js`, supplies test identities and
  policies; it supports CAP-CRM-ENT-003 rather than defining a test suite.
approved_by: Andrew
approved_at: '2026-10-22T00:00:00.000Z'
testing_tree:
  planning/acceptance:
    - FAS-CRM-ENT-01
    - FAS-CRM-ENT-02
    - FAS-CRM-ENT-03
    - FAS-CRM-ENT-04
    - FAS-CRM-ENT-05
    - FAS-CRM-ENT-06
    - FAS-CRM-ENT-07
  design/tests:
    - ATS-CRM-ENT-001
    - ATS-CRM-ENT-002
    - ATS-CRM-ENT-003
    - ATS-CRM-ENT-004
    - ATS-CRM-ENT-005
    - ATS-CRM-ENT-006
    - ATS-CRM-ENT-007
    - ATS-CRM-ENT-008
    - ATS-CRM-ENT-009
    - ATS-CRM-ENT-010
    - ATS-CRM-ENT-011
    - ATS-CRM-ENT-012
    - ATS-CRM-ENT-013
    - ATS-CRM-ENT-014
    - ATS-CRM-ENT-015
    - ATS-CRM-ENT-016
    - ATS-CRM-ENT-017
    - ATS-CRM-ENT-018
    - ATS-CRM-ENT-019
  implementation/tests:
    - TST-CRM-ENT-001
    - TST-CRM-ENT-002
    - TST-CRM-ENT-003
    - TST-CRM-ENT-004
    - TST-CRM-ENT-005
    - TST-CRM-ENT-006
    - TST-CRM-ENT-007
    - TST-CRM-ENT-008
    - TST-CRM-ENT-009
    - TST-CRM-ENT-010
    - TST-CRM-ENT-011
    - TST-CRM-ENT-012
    - TST-CRM-ENT-013
    - TST-CRM-ENT-014
    - TST-CRM-ENT-015
    - TST-CRM-ENT-016
    - TST-CRM-ENT-017
    - TST-CRM-ENT-018
    - TST-CRM-ENT-019
    - TST-CRM-ENT-020
    - TST-CRM-ENT-021
    - TST-CRM-ENT-022
    - TST-CRM-ENT-023
    - TST-CRM-ENT-024
    - TST-CRM-ENT-025
    - TST-CRM-ENT-026
    - TST-CRM-ENT-027
    - TST-CRM-ENT-028
    - TST-CRM-ENT-029
    - TST-CRM-ENT-030
    - TST-CRM-ENT-031
    - TST-CRM-ENT-032
    - TST-CRM-ENT-033
    - TST-CRM-ENT-034
    - TST-CRM-ENT-035
    - TST-CRM-ENT-036
    - TST-CRM-ENT-037
    - TST-CRM-ENT-038
    - TST-CRM-ENT-039
    - TST-CRM-ENT-040
    - TST-CRM-ENT-041
    - TST-CRM-ENT-042
    - TST-CRM-ENT-043
    - TST-CRM-ENT-044
    - TST-CRM-ENT-045
    - TST-CRM-ENT-046
    - TST-CRM-ENT-047
    - TST-CRM-ENT-048
    - TST-CRM-ENT-049
    - TST-CRM-ENT-050
    - TST-CRM-ENT-051
    - TST-CRM-ENT-052
    - TST-CRM-ENT-053
    - TST-CRM-ENT-054
    - TST-CRM-ENT-055
    - TST-CRM-ENT-056
    - TST-CRM-ENT-057
    - TST-CRM-ENT-058
    - TST-CRM-ENT-059
    - TST-CRM-ENT-060
    - TST-CRM-ENT-061
    - TST-CRM-ENT-062
    - TST-CRM-ENT-063
    - TST-CRM-ENT-064
    - TST-CRM-ENT-065
    - TST-CRM-ENT-066
    - TST-CRM-ENT-067
    - TST-CRM-ENT-068
    - TST-CRM-ENT-069
    - TST-CRM-ENT-070
    - TST-CRM-ENT-071
    - TST-CRM-ENT-072
    - TST-CRM-ENT-073
    - TST-CRM-ENT-074
    - TST-CRM-ENT-075
    - TST-CRM-ENT-076
    - TST-CRM-ENT-077
    - TST-CRM-ENT-078
    - TST-CRM-ENT-079
    - TST-CRM-ENT-080
    - TST-CRM-ENT-081
    - TST-CRM-ENT-082
    - TST-CRM-ENT-083
    - TST-CRM-ENT-084
    - TST-CRM-ENT-085
    - TST-CRM-ENT-086
    - TST-CRM-ENT-087
    - TST-CRM-ENT-088
    - TST-CRM-ENT-089
    - TST-CRM-ENT-090
    - TST-CRM-ENT-091
    - TST-CRM-ENT-092
    - TST-CRM-ENT-093
    - TST-CRM-ENT-094
    - TST-CRM-ENT-095
    - TST-CRM-ENT-096
    - TST-CRM-ENT-097
    - TST-CRM-ENT-098
    - TST-CRM-ENT-099
    - TST-CRM-ENT-100
    - TST-CRM-ENT-101
    - TST-CRM-ENT-102
    - TST-CRM-ENT-103
    - TST-CRM-ENT-104
    - TST-CRM-ENT-105
    - TST-CRM-ENT-106
    - TST-CRM-ENT-107
    - TST-CRM-ENT-108
    - TST-CRM-ENT-109
    - TST-CRM-ENT-110
    - TST-CRM-ENT-111
    - TST-CRM-ENT-112
    - TST-CRM-ENT-113
    - TST-CRM-ENT-114
    - TST-CRM-ENT-115
    - TST-CRM-ENT-116
    - TST-CRM-ENT-117
    - TST-CRM-ENT-118
    - TST-CRM-ENT-119
    - TST-CRM-ENT-120
    - TST-CRM-ENT-121
    - TST-CRM-ENT-122
    - TST-CRM-ENT-123
    - TST-CRM-ENT-124
    - TST-CRM-ENT-125
    - TST-CRM-ENT-126
    - TST-CRM-ENT-127
    - TST-CRM-ENT-128
    - TST-CRM-ENT-129
    - TST-CRM-ENT-130
    - TST-CRM-ENT-131
    - TST-CRM-ENT-132
    - TST-CRM-ENT-133
    - TST-CRM-ENT-134
    - TST-CRM-ENT-135
    - TST-CRM-ENT-136
    - TST-CRM-ENT-137
    - TST-CRM-ENT-138
    - TST-CRM-ENT-139
    - TST-CRM-ENT-140
    - TST-CRM-ENT-141
    - TST-CRM-ENT-142
    - TST-CRM-ENT-143
    - TST-CRM-ENT-144
    - TST-CRM-ENT-145
    - TST-CRM-ENT-146
    - TST-CRM-ENT-147
    - TST-CRM-ENT-148
    - TST-CRM-ENT-149
    - TST-CRM-ENT-150
    - TST-CRM-ENT-151
    - TST-CRM-ENT-152
    - TST-CRM-ENT-153
    - TST-CRM-ENT-154
    - TST-CRM-ENT-155
    - TST-CRM-ENT-156
    - TST-CRM-ENT-157
    - TST-CRM-ENT-158
    - TST-CRM-ENT-159
    - TST-CRM-ENT-160
    - TST-CRM-ENT-161
    - TST-CRM-ENT-162
    - TST-CRM-ENT-163
    - TST-CRM-ENT-164
    - TST-CRM-ENT-165
    - TST-CRM-ENT-166
    - TST-CRM-ENT-167
    - TST-CRM-ENT-168
    - TST-CRM-ENT-169
    - TST-CRM-ENT-170
    - TST-CRM-ENT-171
    - TST-CRM-ENT-172
    - TST-CRM-ENT-173
    - TST-CRM-ENT-174
    - TST-CRM-ENT-175
    - TST-CRM-ENT-176
    - TST-CRM-ENT-177
    - TST-CRM-ENT-178
    - TST-CRM-ENT-179
    - TST-CRM-ENT-180
    - TST-CRM-ENT-181
    - TST-CRM-ENT-182
    - TST-CRM-ENT-183
    - TST-CRM-ENT-184
    - TST-CRM-ENT-185
    - TST-CRM-ENT-186
    - TST-CRM-ENT-187
    - TST-CRM-ENT-188
    - TST-CRM-ENT-189
    - TST-CRM-ENT-190
    - TST-CRM-ENT-191
    - TST-CRM-ENT-192
    - TST-CRM-ENT-193
    - TST-CRM-ENT-194
    - TST-CRM-ENT-195
    - TST-CRM-ENT-196
    - TST-CRM-ENT-197
    - TST-CRM-ENT-198
    - TST-CRM-ENT-199
    - TST-CRM-ENT-200
    - TST-CRM-ENT-201
    - TST-CRM-ENT-202
    - TST-CRM-ENT-203
    - TST-CRM-ENT-204
    - TST-CRM-ENT-205
    - TST-CRM-ENT-206
    - TST-CRM-ENT-207
    - TST-CRM-ENT-208
    - TST-CRM-ENT-209
    - TST-CRM-ENT-210
    - TST-CRM-ENT-211
    - TST-CRM-ENT-212
    - TST-CRM-ENT-213
    - TST-CRM-ENT-214
    - TST-CRM-ENT-215
    - TST-CRM-ENT-216
    - TST-CRM-ENT-217
    - TST-CRM-ENT-218
    - TST-CRM-ENT-219
    - TST-CRM-ENT-220
    - TST-CRM-ENT-221
    - TST-CRM-ENT-222
    - TST-CRM-ENT-223
    - TST-CRM-ENT-224
    - TST-CRM-ENT-225
    - TST-CRM-ENT-226
    - TST-CRM-ENT-227
    - TST-CRM-ENT-228
    - TST-CRM-ENT-229
    - TST-CRM-ENT-230
    - TST-CRM-ENT-231
    - TST-CRM-ENT-232
    - TST-CRM-ENT-233
    - TST-CRM-ENT-234
    - TST-CRM-ENT-235
    - TST-CRM-ENT-236
    - TST-CRM-ENT-237
    - TST-CRM-ENT-238
    - TST-CRM-ENT-239
    - TST-CRM-ENT-240
    - TST-CRM-ENT-241
    - TST-CRM-ENT-242
    - TST-CRM-ENT-243
    - TST-CRM-ENT-244
    - TST-CRM-ENT-245
    - TST-CRM-ENT-246
    - TST-CRM-ENT-247
    - TST-CRM-ENT-248
    - TST-CRM-ENT-249
    - TST-CRM-ENT-250
    - TST-CRM-ENT-251
    - TST-CRM-ENT-252
    - TST-CRM-ENT-253
    - TST-CRM-ENT-254
    - TST-CRM-ENT-255
    - TST-CRM-ENT-256
    - TST-CRM-ENT-257
    - TST-CRM-ENT-258
    - TST-CRM-ENT-259
    - TST-CRM-ENT-260
    - TST-CRM-ENT-261
    - TST-CRM-ENT-262
    - TST-CRM-ENT-263
    - TST-CRM-ENT-264
    - TST-CRM-ENT-265
    - TST-CRM-ENT-266
    - TST-CRM-ENT-267
    - TST-CRM-ENT-268
    - TST-CRM-ENT-269
    - TST-CRM-ENT-270
    - TST-CRM-ENT-271
    - TST-CRM-ENT-272
    - TST-CRM-ENT-273
    - TST-CRM-ENT-274
    - TST-CRM-ENT-275
    - TST-CRM-ENT-276
    - TST-CRM-ENT-277
    - TST-CRM-ENT-278
    - TST-CRM-ENT-279
    - TST-CRM-ENT-280
    - TST-CRM-ENT-281
    - TST-CRM-ENT-282
    - TST-CRM-ENT-283
    - TST-CRM-ENT-284
    - TST-CRM-ENT-285
    - TST-CRM-ENT-286
    - TST-CRM-ENT-287
    - TST-CRM-ENT-288
    - TST-CRM-ENT-289
    - TST-CRM-ENT-290
    - TST-CRM-ENT-291
    - TST-CRM-ENT-292
    - TST-CRM-ENT-293
    - TST-CRM-ENT-294
    - TST-CRM-ENT-295
    - TST-CRM-ENT-296
    - TST-CRM-ENT-297
    - TST-CRM-ENT-298
    - TST-CRM-ENT-299
    - TST-CRM-ENT-300
    - TST-CRM-ENT-301
    - TST-CRM-ENT-302
    - TST-CRM-ENT-303
    - TST-CRM-ENT-304
    - TST-CRM-ENT-305
    - TST-CRM-ENT-306
    - TST-CRM-ENT-307
    - TST-CRM-ENT-308
    - TST-CRM-ENT-309
    - TST-CRM-ENT-310
    - TST-CRM-ENT-311
    - TST-CRM-ENT-312
    - TST-CRM-ENT-313
    - TST-CRM-ENT-314
    - TST-CRM-ENT-315
    - TST-CRM-ENT-316
    - TST-CRM-ENT-317
    - TST-CRM-ENT-318
    - TST-CRM-ENT-319
    - TST-CRM-ENT-320
    - TST-CRM-ENT-321
    - TST-CRM-ENT-322
    - TST-CRM-ENT-323
    - TST-CRM-ENT-324
    - TST-CRM-ENT-325
    - TST-CRM-ENT-326
    - TST-CRM-ENT-327
    - TST-CRM-ENT-328
    - TST-CRM-ENT-329
    - TST-CRM-ENT-330
    - TST-CRM-ENT-331
    - TST-CRM-ENT-332
    - TST-CRM-ENT-333
    - TST-CRM-ENT-334
    - TST-CRM-ENT-335
    - TST-CRM-ENT-336
    - TST-CRM-ENT-337
    - TST-CRM-ENT-338
    - TST-CRM-ENT-339
    - TST-CRM-ENT-340
    - TST-CRM-ENT-341
    - TST-CRM-ENT-342
    - TST-CRM-ENT-343
    - TST-CRM-ENT-344
    - TST-CRM-ENT-345
    - TST-CRM-ENT-346
    - TST-CRM-ENT-347
    - TST-CRM-ENT-348
    - TST-CRM-ENT-349
    - TST-CRM-ENT-350
    - TST-CRM-ENT-351
    - TST-CRM-ENT-352
    - TST-CRM-ENT-353
    - TST-CRM-ENT-354
    - TST-CRM-ENT-355
    - TST-CRM-ENT-356
    - TST-CRM-ENT-357
    - TST-CRM-ENT-358
    - TST-CRM-ENT-359
    - TST-CRM-ENT-360
    - TST-CRM-ENT-361
    - TST-CRM-ENT-362
    - TST-CRM-ENT-363
    - TST-CRM-ENT-364
    - TST-CRM-ENT-365
    - TST-CRM-ENT-366
    - TST-CRM-ENT-367
    - TST-CRM-ENT-368
    - TST-CRM-ENT-369
    - TST-CRM-ENT-370
    - TST-CRM-ENT-371
    - TST-CRM-ENT-372
    - TST-CRM-ENT-373
    - TST-CRM-ENT-374
    - TST-CRM-ENT-375
    - TST-CRM-ENT-376
    - TST-CRM-ENT-377
    - TST-CRM-ENT-378
    - TST-CRM-ENT-379
    - TST-CRM-ENT-380
    - TST-CRM-ENT-381
    - TST-CRM-ENT-382
    - TST-CRM-ENT-383
    - TST-CRM-ENT-384
    - TST-CRM-ENT-385
    - TST-CRM-ENT-386
    - TST-CRM-ENT-387
    - TST-CRM-ENT-388
    - TST-CRM-ENT-389
    - TST-CRM-ENT-390
    - TST-CRM-ENT-391
    - TST-CRM-ENT-392
    - TST-CRM-ENT-393
    - TST-CRM-ENT-394
    - TST-CRM-ENT-395
    - TST-CRM-ENT-396
    - TST-CRM-ENT-397
    - TST-CRM-ENT-398
    - TST-CRM-ENT-399
    - TST-CRM-ENT-400
    - TST-CRM-ENT-401
    - TST-CRM-ENT-402
    - TST-CRM-ENT-403
    - TST-CRM-ENT-404
    - TST-CRM-ENT-405
    - TST-CRM-ENT-406
    - TST-CRM-ENT-407
    - TST-CRM-ENT-408
    - TST-CRM-ENT-409
    - TST-CRM-ENT-410
    - TST-CRM-ENT-411
    - TST-CRM-ENT-412
    - TST-CRM-ENT-413
    - TST-CRM-ENT-414
    - TST-CRM-ENT-415
    - TST-CRM-ENT-416
    - TST-CRM-ENT-417
    - TST-CRM-ENT-418
    - TST-CRM-ENT-419
    - TST-CRM-ENT-420
    - TST-CRM-ENT-421
    - TST-CRM-ENT-422
    - TST-CRM-ENT-423
    - TST-CRM-ENT-424
    - TST-CRM-ENT-425
    - TST-CRM-ENT-426
    - TST-CRM-ENT-427
    - TST-CRM-ENT-428
    - TST-CRM-ENT-429
    - TST-CRM-ENT-430
    - TST-CRM-ENT-431
    - TST-CRM-ENT-432
    - TST-CRM-ENT-433
    - TST-CRM-ENT-434
    - TST-CRM-ENT-435
    - TST-CRM-ENT-436
    - TST-CRM-ENT-437
    - TST-CRM-ENT-438
    - TST-CRM-ENT-439
    - TST-CRM-ENT-440
    - TST-CRM-ENT-441
    - TST-CRM-ENT-442
    - TST-CRM-ENT-443
    - TST-CRM-ENT-444
    - TST-CRM-ENT-445
    - TST-CRM-ENT-446
    - TST-CRM-ENT-447
    - TST-CRM-ENT-448
    - TST-CRM-ENT-449
    - TST-CRM-ENT-450
    - TST-CRM-ENT-451
    - TST-CRM-ENT-452
    - TST-CRM-ENT-453
    - TST-CRM-ENT-454
    - TST-CRM-ENT-455
    - TST-CRM-ENT-456
    - TST-CRM-ENT-457
    - TST-CRM-ENT-458
    - TST-CRM-ENT-459
    - TST-CRM-ENT-460
    - TST-CRM-ENT-461
    - TST-CRM-ENT-462
    - TST-CRM-ENT-463
    - TST-CRM-ENT-464
    - TST-CRM-ENT-465
    - TST-CRM-ENT-466
    - TST-CRM-ENT-467
    - TST-CRM-ENT-468
    - TST-CRM-ENT-469
    - TST-CRM-ENT-470
    - TST-CRM-ENT-471
    - TST-CRM-ENT-472
    - TST-CRM-ENT-473
    - TST-CRM-ENT-474
    - TST-CRM-ENT-475
    - TST-CRM-ENT-476
    - TST-CRM-ENT-477
    - TST-CRM-ENT-478
    - TST-CRM-ENT-479
    - TST-CRM-ENT-480
    - TST-CRM-ENT-481
    - TST-CRM-ENT-482
    - TST-CRM-ENT-483
    - TST-CRM-ENT-484
    - TST-CRM-ENT-485
    - TST-CRM-ENT-486
    - TST-CRM-ENT-487
    - TST-CRM-ENT-488
    - TST-CRM-ENT-489
    - TST-CRM-ENT-490
    - TST-CRM-ENT-491
    - TST-CRM-ENT-492
    - TST-CRM-ENT-493
    - TST-CRM-ENT-494
    - TST-CRM-ENT-495
    - TST-CRM-ENT-496
    - TST-CRM-ENT-497
    - TST-CRM-ENT-498
    - TST-CRM-ENT-499
    - TST-CRM-ENT-500
    - TST-CRM-ENT-501
    - TST-CRM-ENT-502
    - TST-CRM-ENT-503
    - TST-CRM-ENT-504
    - TST-CRM-ENT-505
    - TST-CRM-ENT-506
    - TST-CRM-ENT-507
    - TST-CRM-ENT-508
    - TST-CRM-ENT-509
    - TST-CRM-ENT-510
    - TST-CRM-ENT-511
    - TST-CRM-ENT-512
    - TST-CRM-ENT-513
    - TST-CRM-ENT-514
    - TST-CRM-ENT-515
    - TST-CRM-ENT-516
    - TST-CRM-ENT-517
    - TST-CRM-ENT-518
    - TST-CRM-ENT-519
    - TST-CRM-ENT-520
    - TST-CRM-ENT-521
    - TST-CRM-ENT-522
    - TST-CRM-ENT-523
    - TST-CRM-ENT-524
    - TST-CRM-ENT-525
    - TST-CRM-ENT-526
    - TST-CRM-ENT-527
    - TST-CRM-ENT-528
    - TST-CRM-ENT-529
    - TST-CRM-ENT-530
    - TST-CRM-ENT-531
    - TST-CRM-ENT-532
    - TST-CRM-ENT-533
    - TST-CRM-ENT-534
    - TST-CRM-ENT-535
    - TST-CRM-ENT-536
    - TST-CRM-ENT-537
    - TST-CRM-ENT-538
    - TST-CRM-ENT-539
    - TST-CRM-ENT-540
    - TST-CRM-ENT-541
    - TST-CRM-ENT-542
    - TST-CRM-ENT-543
    - TST-CRM-ENT-544
    - TST-CRM-ENT-545
    - TST-CRM-ENT-546
    - TST-CRM-ENT-547
    - TST-CRM-ENT-548
    - TST-CRM-ENT-549
    - TST-CRM-ENT-550
    - TST-CRM-ENT-551
    - TST-CRM-ENT-552
    - TST-CRM-ENT-553
    - TST-CRM-ENT-554
    - TST-CRM-ENT-555
    - TST-CRM-ENT-556
    - TST-CRM-ENT-557
    - TST-CRM-ENT-558
    - TST-CRM-ENT-559
    - TST-CRM-ENT-560
    - TST-CRM-ENT-561
    - TST-CRM-ENT-562
    - TST-CRM-ENT-563
    - TST-CRM-ENT-564
    - TST-CRM-ENT-565
    - TST-CRM-ENT-566
    - TST-CRM-ENT-567
    - TST-CRM-ENT-568
    - TST-CRM-ENT-569
    - TST-CRM-ENT-570
    - TST-CRM-ENT-571
    - TST-CRM-ENT-572
    - TST-CRM-ENT-573
    - TST-CRM-ENT-574
    - TST-CRM-ENT-575
    - TST-CRM-ENT-576
    - TST-CRM-ENT-577
    - TST-CRM-ENT-578
    - TST-CRM-ENT-579
    - TST-CRM-ENT-580
    - TST-CRM-ENT-581
    - TST-CRM-ENT-582
    - TST-CRM-ENT-583
    - TST-CRM-ENT-584
    - TST-CRM-ENT-585
    - TST-CRM-ENT-586
    - TST-CRM-ENT-587
    - TST-CRM-ENT-588
    - TST-CRM-ENT-589
    - TST-CRM-ENT-590
    - TST-CRM-ENT-591
    - TST-CRM-ENT-592
    - TST-CRM-ENT-593
    - TST-CRM-ENT-594
    - TST-CRM-ENT-595
    - TST-CRM-ENT-596
    - TST-CRM-ENT-597
    - TST-CRM-ENT-598
    - TST-CRM-ENT-599
    - TST-CRM-ENT-600
    - TST-CRM-ENT-601
    - TST-CRM-ENT-602
    - TST-CRM-ENT-603
    - TST-CRM-ENT-604
    - TST-CRM-ENT-605
    - TST-CRM-ENT-606
    - TST-CRM-ENT-607
    - TST-CRM-ENT-608
    - TST-CRM-ENT-609
    - TST-CRM-ENT-610
    - TST-CRM-ENT-611
    - TST-CRM-ENT-612
    - TST-CRM-ENT-613
    - TST-CRM-ENT-614
    - TST-CRM-ENT-615
    - TST-CRM-ENT-616
    - TST-CRM-ENT-617
    - TST-CRM-ENT-618
    - TST-CRM-ENT-619
    - TST-CRM-ENT-620
    - TST-CRM-ENT-621
    - TST-CRM-ENT-622
    - TST-CRM-ENT-623
    - TST-CRM-ENT-624
    - TST-CRM-ENT-625
    - TST-CRM-ENT-626
    - TST-CRM-ENT-627
    - TST-CRM-ENT-628
    - TST-CRM-ENT-629
    - TST-CRM-ENT-630
    - TST-CRM-ENT-631
    - TST-CRM-ENT-632
    - TST-CRM-ENT-633
    - TST-CRM-ENT-634
    - TST-CRM-ENT-635
    - TST-CRM-ENT-636
    - TST-CRM-ENT-637
    - TST-CRM-ENT-638
    - TST-CRM-ENT-639
    - TST-CRM-ENT-640
    - TST-CRM-ENT-641
    - TST-CRM-ENT-642
    - TST-CRM-ENT-643
    - TST-CRM-ENT-644
    - TST-CRM-ENT-645
    - TST-CRM-ENT-646
    - TST-CRM-ENT-647
    - TST-CRM-ENT-648
    - TST-CRM-ENT-649
    - TST-CRM-ENT-650
    - TST-CRM-ENT-651
    - TST-CRM-ENT-652
    - TST-CRM-ENT-653
    - TST-CRM-ENT-654
    - TST-CRM-ENT-655
    - TST-CRM-ENT-656
    - TST-CRM-ENT-657
    - TST-CRM-ENT-658
    - TST-CRM-ENT-659
    - TST-CRM-ENT-660
    - TST-CRM-ENT-661
    - TST-CRM-ENT-662
    - TST-CRM-ENT-663
    - TST-CRM-ENT-664
    - TST-CRM-ENT-665
    - TST-CRM-ENT-666
    - TST-CRM-ENT-667
    - TST-CRM-ENT-668
    - TST-CRM-ENT-669
    - TST-CRM-ENT-670
    - TST-CRM-ENT-671
    - TST-CRM-ENT-672
    - TST-CRM-ENT-673
    - TST-CRM-ENT-674
    - TST-CRM-ENT-675
    - TST-CRM-ENT-676
    - TST-CRM-ENT-677
    - TST-CRM-ENT-678
    - TST-CRM-ENT-679
    - TST-CRM-ENT-680
    - TST-CRM-ENT-681
    - TST-CRM-ENT-682
    - TST-CRM-ENT-683
    - TST-CRM-ENT-684
    - TST-CRM-ENT-685
    - TST-CRM-ENT-686
    - TST-CRM-ENT-687
    - TST-CRM-ENT-688
    - TST-CRM-ENT-689
    - TST-CRM-ENT-690
    - TST-CRM-ENT-691
    - TST-CRM-ENT-692
    - TST-CRM-ENT-693
    - TST-CRM-ENT-694
    - TST-CRM-ENT-695
    - TST-CRM-ENT-696
    - TST-CRM-ENT-697
    - TST-CRM-ENT-698
    - TST-CRM-ENT-699
    - TST-CRM-ENT-700
    - TST-CRM-ENT-701
    - TST-CRM-ENT-702
    - TST-CRM-ENT-703
    - TST-CRM-ENT-704
    - TST-CRM-ENT-705
    - TST-CRM-ENT-706
    - TST-CRM-ENT-707
    - TST-CRM-ENT-708
    - TST-CRM-ENT-709
    - TST-CRM-ENT-710
    - TST-CRM-ENT-711
    - TST-CRM-ENT-712
    - TST-CRM-ENT-713
    - TST-CRM-ENT-714
    - TST-CRM-ENT-715
    - TST-CRM-ENT-716
    - TST-CRM-ENT-717
    - TST-CRM-ENT-718
    - TST-CRM-ENT-719
    - TST-CRM-ENT-720
    - TST-CRM-ENT-721
    - TST-CRM-ENT-722
    - TST-CRM-ENT-723
    - TST-CRM-ENT-724
    - TST-CRM-ENT-725
    - TST-CRM-ENT-726
    - TST-CRM-ENT-727
    - TST-CRM-ENT-728
    - TST-CRM-ENT-729
    - TST-CRM-ENT-730
    - TST-CRM-ENT-731
    - TST-CRM-ENT-732
    - TST-CRM-ENT-733
    - TST-CRM-ENT-734
    - TST-CRM-ENT-735
    - TST-CRM-ENT-736
    - TST-CRM-ENT-737
    - TST-CRM-ENT-738
    - TST-CRM-ENT-739
    - TST-CRM-ENT-740
    - TST-CRM-ENT-741
    - TST-CRM-ENT-742
    - TST-CRM-ENT-743
    - TST-CRM-ENT-744
    - TST-CRM-ENT-745
    - TST-CRM-ENT-746
    - TST-CRM-ENT-747
    - TST-CRM-ENT-748
    - TST-CRM-ENT-749
    - TST-CRM-ENT-750
    - TST-CRM-ENT-751
    - TST-CRM-ENT-752
    - TST-CRM-ENT-753
    - TST-CRM-ENT-754
    - TST-CRM-ENT-755
    - TST-CRM-ENT-756
    - TST-CRM-ENT-757
    - TST-CRM-ENT-758
    - TST-CRM-ENT-759
    - TST-CRM-ENT-760
    - TST-CRM-ENT-761
    - TST-CRM-ENT-762
    - TST-CRM-ENT-763
    - TST-CRM-ENT-764
    - TST-CRM-ENT-765
    - TST-CRM-ENT-766
    - TST-CRM-ENT-767
    - TST-CRM-ENT-768
    - TST-CRM-ENT-769
    - TST-CRM-ENT-770
    - TST-CRM-ENT-771
    - TST-CRM-ENT-772
    - TST-CRM-ENT-773
testing_examination:
  report: specs/crm/entities/reports/EXAMINATION-2026-10-23.md
  provenance: documented
  source: 'rhythm-v2-docs:specs/crm/entities/reports/EXAMINATION-2026-10-23.md'
  findings:
    - FND-CRM-ENT-075
    - FND-CRM-ENT-076
narrative:
  status: verified
  review: NARRATIVE-REVIEW-2026-10-23
narrative_sources:
  - section: Purpose
    provenance: documented
    source: >-
      rhythm-v2-docs:specs/crm/architecture/ARCH-CRM-01-rhythm-crm-architecture.md
      What CRM is
  - section: Boundary
    provenance: documented
    source: >-
      rhythm-v2-docs:specs/PRODUCT-AREAS.md#Modules;
      rhythm-v2-docs:specs/crm/RESPONSIBILITIES.md
  - section: Permissions
    provenance: documented
    source: 'rhythm-v2-docs:specs/crm/AUTHORIZATION.md#Role Entitlement Matrix'
  - section: Permissions
    provenance: observed
    source: >-
      services-crm:modules/entities/aws/api;
      react-console:components/configuration/config-list-screen.tsx;
      react-console:components/console/record/action-toolbar.tsx
  - section: Permissions
    provenance: inferred
    source: 'rhythm-v2-docs:specs/crm/AUTHORIZATION.md'
    note: >-
      The explicitly labeled rationale distinguishes business role assignments
      from evaluated security grants; it does not assert a new policy.
---

# Entities

## Purpose

Entities gives an association a continuing record of the people and organizations it works with. A member, a firm, and a chapter need identities that remain recognizable when staff change names, addresses, representatives, or employment information. This module owns that shared CRM foundation and the dated organizational relationships that connect it.

Staff use Entities to establish a person or organization, find the record again, maintain contact points, and describe current or past affiliations and responsibilities. Types and workspace defaults give those records the customer's vocabulary and select appropriate Platform forms and layouts. Organization role compliance relates effective representatives to the expectations configured for their organization type, with explanatory violations and separately coordinated notices.

The module also addresses what happens after ordinary data entry. A shared address can lose its source and require verification. An employer change can preserve its earlier affiliation rather than replace it. An open editor can become stale after a colleague or the system saves. A closed organization can be archived while retaining the relationships that explain past association work. Locks and attributed revisions help staff control and investigate those changes.

The explanatory pages describe these operations and boundaries; capability rules remain the authoritative behavioral contracts. Recorded intent can differ from today's implementation, especially complete-payload replacement and the future safe-delete experience. Test specifications identify owed proof and executable bindings without claiming that source inspection executes those tests. Readers can begin with a feature matching their task, use concepts to understand the business vocabulary, and follow a journey for a complete staff process.

## Who Uses It

The CRM Editor establishes records, corrects contact details, and maintains affiliations and responsibilities. The CRM Reader finds people and organizations and inspects information and history under the relevant authority. The CRM Administrator maintains categories, defaults, compliance policy, archive, and supported lock actions.

The Data Importer supplies authorized external record work through shared service rules. The CRM System performs related updates, effective-date processing, and compliance reactions. These actors describe responsibilities rather than granting authority themselves; Platform security evaluates the permission and workspace boundaries that each operation declares.

## How It Is Organized

Contact Records is the starting point for creating a person, locating saved identities, and keeping customer-defined values. Open it when staff need one recognizable person across later association work or need to distinguish direct record discovery from search projections.

Organization Records establishes bodies and their structural hierarchy. Open it when creating a firm or chapter, choosing a parent, or understanding why descendant ancestry changes after a parent move while individual representatives remain separate contacts.

Contact Details and Communication Preferences explains reachability and communication instructions. Open it for typed and preferred values, seasonal mailing, organization-supplied details, or recovery of disconnected information, keeping preference storage distinct from a sender's enforcement.

Affiliations and Roles explains dated connections and responsibilities. Open it for an employer change, concurrent organizational ties, recurring role periods, primary selection, or boundary processing that applies automatic roles and shared-detail defaults on eligible starts.

Organization Compliance explains calculated role coverage and the response to gaps. Open it when interpreting violations, configuring or previewing notices, or reprocessing existing assessments after policy changes rather than assuming a catalogue edit refreshes every organization immediately.

Classification Types and CRM Settings explains the shared CRM vocabulary and presentation choices. Open it when administering Contact Type, Organization Type, Affiliation Type, Contact Role, address or phone purposes, workspace defaults, or effective Platform form and layout assignments.

Record Protection and History explains deliberate and concurrent change. Open it for stale saves, archive and restoration, hard-deletion blockers, customer locks versus system protection, and retained attributed revisions that explain what happened without providing an automatic restore command.

## Permissions

The CRM authorization model defines the grants below. Administrator and Power User share the module’s administrative grants; Standard User and Read Only receive the narrower operations indicated per key. Portal Member receives no built-in CRM grants. A Contact Role is a business responsibility and conveys none of these security permissions. Our reading is that keeping those meanings separate prevents a compliance role from being mistaken for administrative authority.

Screen gates filter controls and access, while each called route checks its evaluated permission. Aggregate versions, archive state, customer locks, Rhythm protection and dependencies can still refuse a permitted operation. Settings reads evaluate each requested section and withhold unauthorized sections; any unauthorized section in a write refuses the whole request. Effective forms and layouts also use the relevant kind’s read authority.

| Permission key | What it protects | Built-in roles | Where checked |
|---|---|---|---|
| crm.address-types.create | Creation of address-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.address-types.delete | Removal of address-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.address-types.read | Inspection of address-types data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.address-types.update | Changes to address-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.affiliation-types.create | Creation of affiliation-types | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.affiliation-types.delete | Removal of affiliation-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.affiliation-types.read | Inspection of affiliation-types data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.affiliation-types.set-default | Changing the workspace default affiliation-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.affiliation-types.update | Changes to affiliation-types | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.application.access | Entry to the CRM application | Administrator, Power User, Standard User, Read Only | Console application gate and CRM route authorization |
| crm.contact-layouts.read | Inspection of contact-layouts data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.contact-layouts.update | Changes to contact-layouts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contact-roles.create | Creation of contact-roles | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.contact-roles.delete | Removal of contact-roles | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contact-roles.lock | Applying customer restrictions to contact-roles | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contact-roles.read | Inspection of contact-roles data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.contact-roles.unlock | Releasing customer restrictions on contact-roles | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contact-roles.update | Changes to contact-roles | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.contact-types.create | Creation of contact-types | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.contact-types.delete | Removal of contact-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contact-types.read | Inspection of contact-types data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.contact-types.update | Changes to contact-types | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.contacts.archive | Archive and unarchive of contacts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contacts.bulk | Bulk work on contacts | Administrator, Power User | Bulk action gate and owning submission boundary |
| crm.contacts.create | Creation of contacts | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.contacts.create-despite-duplicate-block | Explained creation despite a duplicate block for contacts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contacts.delete | Removal of contacts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contacts.history | Inspection of captured contacts revisions | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.contacts.lock | Applying customer restrictions to contacts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contacts.merge | Merge actions for contacts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contacts.query | Dataset query and export of contacts | Administrator, Power User, Standard User, Read Only | Dataset explorer/export permission gate and owning query boundary |
| crm.contacts.read | Inspection of contacts data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.contacts.unlock | Releasing customer restrictions on contacts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.contacts.update | Changes to contacts | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.organization-layouts.read | Inspection of organization-layouts data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.organization-layouts.update | Changes to organization-layouts | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organization-types.create | Creation of organization-types | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.organization-types.delete | Removal of organization-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organization-types.read | Inspection of organization-types data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.organization-types.update | Changes to organization-types | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.organizations.archive | Archive and unarchive of organizations | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organizations.bulk | Bulk work on organizations | Administrator, Power User | Bulk action gate and owning submission boundary |
| crm.organizations.create | Creation of organizations | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.organizations.create-despite-duplicate-block | Explained creation despite a duplicate block for organizations | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organizations.delete | Removal of organizations | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organizations.history | Inspection of captured organizations revisions | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.organizations.lock | Applying customer restrictions to organizations | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organizations.merge | Merge actions for organizations | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organizations.query | Dataset query and export of organizations | Administrator, Power User, Standard User, Read Only | Dataset explorer/export permission gate and owning query boundary |
| crm.organizations.read | Inspection of organizations data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.organizations.unlock | Releasing customer restrictions on organizations | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.organizations.update | Changes to organizations | Administrator, Power User, Standard User | Entities or classification route; corresponding screen action gate |
| crm.phone-number-types.create | Creation of phone-number-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.phone-number-types.delete | Removal of phone-number-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |
| crm.phone-number-types.read | Inspection of phone-number-types data | Administrator, Power User, Standard User, Read Only | Entities or classification route; corresponding screen action gate |
| crm.phone-number-types.update | Changes to phone-number-types | Administrator, Power User | Entities or classification route; corresponding screen action gate |

Cross-application record sections use their owning application’s grants. This module does not grant access to every panel because the person’s profile is readable. Additional task, committee and order permission names in the configured record view require their owning authorization models; missing CRM-model coverage is an open finding. Platform Data Job Engine authority is likewise an additional guard on engine-backed bulk actions.

## Boundary

Entities owns contact and organization identities, their record values and contact points, contact-owned affiliations and role periods, the CRM classification catalogues and settings, role-compliance assessments, and record safeguards and revision reads. Contact photos and organization logos are CRM references to files; Platform owns file concepts and storage. The configuration function's route hosting does not change Entities' product ownership of its catalogues.

Platform metadata owns custom field definitions, forms, layouts, and the presentation vocabulary. Platform security owns users, access, and permission evaluation; Platform query systems own exploration and Quick Search infrastructure; Platform notifications owns templates and sending. Platform Data Job Engine and workspace lifecycle own bulk orchestration and provisioning or purge. Other CRM modules own data quality, activities and tasks, and regions. Other applications own memberships and financial or program records that reference these identities.

No Entities workflow, screen, or service declares an inference operation. The module's mechanisms therefore do not require an inference artifact or imply AI-generated decisions about identity or compliance.

## Features

| Feature | Owned Concepts | Capabilities | Journeys |
|---|---|---|---|
| `FEAT-CRM-ENT-01` — Contact Records | 1 | 3 | 2 |
| `FEAT-CRM-ENT-02` — Organization Records | 1 | 1 | 0 |
| `FEAT-CRM-ENT-03` — Contact Details and Communication Preferences | 1 | 3 | 0 |
| `FEAT-CRM-ENT-04` — Affiliations and Roles | 1 | 3 | 1 |
| `FEAT-CRM-ENT-05` — Organization Compliance | 1 | 1 | 0 |
| `FEAT-CRM-ENT-06` — Classification Types and CRM Settings | 5 | 3 | 1 |
| `FEAT-CRM-ENT-07` — Record Protection and History | 1 | 5 | 1 |

## Capabilities

| Id | Title | Product intent |
|---|---|---|
| `CAP-CRM-ENT-001` | Establish a person’s CRM record | confirmed |
| `CAP-CRM-ENT-002` | Establish an organization and its hierarchy | confirmed |
| `CAP-CRM-ENT-003` | Locate people and organizations | proposed |
| `CAP-CRM-ENT-004` | Save corrections without overwriting another change | proposed |
| `CAP-CRM-ENT-005` | Maintain reliable contact points | confirmed |
| `CAP-CRM-ENT-006` | Share organization contact points with affiliated people | proposed |
| `CAP-CRM-ENT-007` | Capture a person’s communication choices | confirmed |
| `CAP-CRM-ENT-008` | Keep customer-defined information with records | confirmed |
| `CAP-CRM-ENT-009` | Maintain a person’s organizational relationships | confirmed |
| `CAP-CRM-ENT-010` | Keep dated relationships current | confirmed |
| `CAP-CRM-ENT-011` | Maintain responsibilities on organizational relationships | proposed |
| `CAP-CRM-ENT-012` | Review organization role compliance and prepare notices | confirmed |
| `CAP-CRM-ENT-013` | Set records aside and restore them | confirmed |
| `CAP-CRM-ENT-014` | Remove records and their owned information | confirmed |
| `CAP-CRM-ENT-015` | Control record locks and system protection | confirmed |
| `CAP-CRM-ENT-016` | Inspect a record’s changes over time | confirmed |
| `CAP-CRM-ENT-017` | Configure affiliation types and contact roles | proposed |
| `CAP-CRM-ENT-018` | Organize the workspace’s record classifications | proposed |
| `CAP-CRM-ENT-019` | Resolve the forms and layouts used for CRM records | proposed |

## Journeys

| Id | Title | Product intent | E2E policy |
|---|---|---|---|
| `JNY-CRM-ENT-001` | Create a member record and inspect the saved information | proposed | required |
| `JNY-CRM-ENT-002` | Record an employer change while retaining the previous affiliation | proposed | required |
| `JNY-CRM-ENT-003` | Archive a closed organization and inspect its retained history | proposed | required |
| `JNY-CRM-ENT-004` | Configure an affiliation type and use it on a contact | proposed | required |
| `JNY-CRM-ENT-005` | Find current affiliates across an organization hierarchy | proposed | optional |
