---
id: SVC-PFM-DJE-crm-data-jobs
title: CRM Data Jobs
product_area: platform
module: data-job-engine
repository: services-crm
source_module: modules/data-jobs
revision: 1
status: draft
design_intent: confirmed
origin: >-
  services-platform:docs/proposals/rhythm-data-job-engine-plan.md (approved by
  Andrew 2026-10-12: §5.3, §9, §14 one explicit route per operation, §16
  security); PLAT-M19 Product Accepted 2026-10-22; CRM data jobs are not a
  module of their own but the engine's consumer (Andrew, 2026-10-22 19:35 ET,
  specs/PRODUCT-AREAS.md)
implementation_evidence: observed
inference: []
source_sha:
  services-crm: a8d1364f1dd44b723bb5f9acba12f983e9ec8d69
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
owns: []
does_not_own:
  - The library owns engine designs; CRM stores their job and mapping instances.
  - 'CRM record modules retain business records, validation, history and events.'
  - >-
    Platform retains upload sessions, shared protection decisions and lifecycle
    orchestration.
operations:
  - operation_id: submitContactDataJob
    intent: Create a contact job from the input forms this collection supports.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-007
      - CAP-PFM-DJE-009
      - CAP-PFM-DJE-012
      - CAP-PFM-DJE-014
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listContactDataJobs
    intent: Page accessible CRM jobs with supported filters and newest-first ordering.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getContactDataJob
    intent: >-
      Read a CRM job’s current status and summary without requiring contact-only
      identity.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listContactDataJobMappingTargets
    intent: >-
      Describe supported spreadsheet detail targets for contact using workspace
      type labels.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-013
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readContactsBySourceKey
    intent: >-
      Resolve producer keys to current saved contacts through this collection’s
      authority checks.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listContactDataJobResults
    intent: Page recorded item outcomes for the contact job.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listContactDataJobRejections
    intent: Page refusal evidence for the contact job in input-position order.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyContactDataJob
    intent: >-
      Approve a validated contact job using its saved impact digest and any
      required deletion phrase.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: rollbackContactDataJob
    intent: >-
      Prepare a separate versioned compensation preview for an eligible contact
      update.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-008
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseContactDataJob
    intent: Hold queued or active contact work at its batch boundary.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeContactDataJob
    intent: Requeue unfinished batches from a paused contact job.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelContactDataJob
    intent: Abandon future contact batches and retain committed changes.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryContactDataJob
    intent: Take up eligible paused or dependency-blocked contact work.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateContactDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished contact job.
    access: console
    permission: crm.contacts.bulk and one of crm.contacts.update or crm.contacts.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitOrganizationDataJob
    intent: Create a organization job from the input forms this collection supports.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-007
      - CAP-PFM-DJE-009
      - CAP-PFM-DJE-012
      - CAP-PFM-DJE-014
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listOrganizationDataJobs
    intent: Page accessible organization jobs using the supported filters.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getOrganizationDataJob
    intent: 'Inspect the organization job’s state, counters and lifecycle details.'
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listOrganizationDataJobMappingTargets
    intent: >-
      Describe supported spreadsheet detail targets for organization using
      workspace type labels.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-013
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readOrganizationsBySourceKey
    intent: >-
      Resolve producer keys to current saved organizations through this
      collection’s authority checks.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listOrganizationDataJobResults
    intent: Page recorded item outcomes for the organization job.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listOrganizationDataJobRejections
    intent: Page refusal evidence for the organization job in input-position order.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyOrganizationDataJob
    intent: >-
      Approve a validated organization job using its saved impact digest and any
      required deletion phrase.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: rollbackOrganizationDataJob
    intent: >-
      Prepare a separate versioned compensation preview for an eligible
      organization update.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-008
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseOrganizationDataJob
    intent: Hold queued or active organization work at its batch boundary.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeOrganizationDataJob
    intent: Requeue unfinished batches from a paused organization job.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelOrganizationDataJob
    intent: Abandon future organization batches and retain committed changes.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryOrganizationDataJob
    intent: Take up eligible paused or dependency-blocked organization work.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateOrganizationDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished organization job.
    access: console
    permission: >-
      crm.organizations.bulk and one of crm.organizations.update or
      crm.organizations.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitContactTypesDataJob
    intent: Create a contact types job from the input forms this collection supports.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-010
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listContactTypesDataJobs
    intent: Page accessible contact types jobs using the supported filters.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getContactTypesDataJob
    intent: 'Inspect the contact types job’s state, counters and lifecycle details.'
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readContactTypesBySourceKey
    intent: >-
      Resolve producer keys to current saved contact types through this
      collection’s authority checks.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listContactTypesDataJobResults
    intent: Page recorded item outcomes for the contact types job.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listContactTypesDataJobRejections
    intent: Page refusal evidence for the contact types job in input-position order.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyContactTypesDataJob
    intent: >-
      Approve a validated contact types job using its saved impact digest and
      any required deletion phrase.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseContactTypesDataJob
    intent: Hold queued or active contact types work at its batch boundary.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeContactTypesDataJob
    intent: Requeue unfinished batches from a paused contact types job.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelContactTypesDataJob
    intent: Abandon future contact types batches and retain committed changes.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryContactTypesDataJob
    intent: Take up eligible paused or dependency-blocked contact types work.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateContactTypesDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished contact types job.
    access: console
    permission: >-
      crm.contact-types.bulk and one of crm.contact-types.update or
      crm.contact-types.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitContactRolesDataJob
    intent: Create a contact roles job from the input forms this collection supports.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-010
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listContactRolesDataJobs
    intent: Page accessible contact roles jobs using the supported filters.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getContactRolesDataJob
    intent: 'Inspect the contact roles job’s state, counters and lifecycle details.'
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readContactRolesBySourceKey
    intent: >-
      Resolve producer keys to current saved contact roles through this
      collection’s authority checks.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listContactRolesDataJobResults
    intent: Page recorded item outcomes for the contact roles job.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listContactRolesDataJobRejections
    intent: Page refusal evidence for the contact roles job in input-position order.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyContactRolesDataJob
    intent: >-
      Approve a validated contact roles job using its saved impact digest and
      any required deletion phrase.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseContactRolesDataJob
    intent: Hold queued or active contact roles work at its batch boundary.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeContactRolesDataJob
    intent: Requeue unfinished batches from a paused contact roles job.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelContactRolesDataJob
    intent: Abandon future contact roles batches and retain committed changes.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryContactRolesDataJob
    intent: Take up eligible paused or dependency-blocked contact roles work.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateContactRolesDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished contact roles job.
    access: console
    permission: >-
      crm.contact-roles.bulk and one of crm.contact-roles.update or
      crm.contact-roles.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitOrganizationTypesDataJob
    intent: >-
      Create a organization types job from the input forms this collection
      supports.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-010
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listOrganizationTypesDataJobs
    intent: Page accessible organization types jobs using the supported filters.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getOrganizationTypesDataJob
    intent: >-
      Inspect the organization types job’s state, counters and lifecycle
      details.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readOrganizationTypesBySourceKey
    intent: >-
      Resolve producer keys to current saved organization types through this
      collection’s authority checks.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listOrganizationTypesDataJobResults
    intent: Page recorded item outcomes for the organization types job.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listOrganizationTypesDataJobRejections
    intent: >-
      Page refusal evidence for the organization types job in input-position
      order.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyOrganizationTypesDataJob
    intent: >-
      Approve a validated organization types job using its saved impact digest
      and any required deletion phrase.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseOrganizationTypesDataJob
    intent: Hold queued or active organization types work at its batch boundary.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeOrganizationTypesDataJob
    intent: Requeue unfinished batches from a paused organization types job.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelOrganizationTypesDataJob
    intent: Abandon future organization types batches and retain committed changes.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryOrganizationTypesDataJob
    intent: Take up eligible paused or dependency-blocked organization types work.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateOrganizationTypesDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished organization types job.
    access: console
    permission: >-
      crm.organization-types.bulk and one of crm.organization-types.update or
      crm.organization-types.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitAddressTypesDataJob
    intent: Create a address types job from the input forms this collection supports.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-010
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listAddressTypesDataJobs
    intent: Page accessible address types jobs using the supported filters.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getAddressTypesDataJob
    intent: 'Inspect the address types job’s state, counters and lifecycle details.'
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readAddressTypesBySourceKey
    intent: >-
      Resolve producer keys to current saved address types through this
      collection’s authority checks.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listAddressTypesDataJobResults
    intent: Page recorded item outcomes for the address types job.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listAddressTypesDataJobRejections
    intent: Page refusal evidence for the address types job in input-position order.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyAddressTypesDataJob
    intent: >-
      Approve a validated address types job using its saved impact digest and
      any required deletion phrase.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseAddressTypesDataJob
    intent: Hold queued or active address types work at its batch boundary.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeAddressTypesDataJob
    intent: Requeue unfinished batches from a paused address types job.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelAddressTypesDataJob
    intent: Abandon future address types batches and retain committed changes.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryAddressTypesDataJob
    intent: Take up eligible paused or dependency-blocked address types work.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateAddressTypesDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished address types job.
    access: console
    permission: >-
      crm.address-types.bulk and one of crm.address-types.update or
      crm.address-types.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitPhoneNumberTypesDataJob
    intent: >-
      Create a phone number types job from the input forms this collection
      supports.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-010
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listPhoneNumberTypesDataJobs
    intent: Page accessible phone number types jobs using the supported filters.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getPhoneNumberTypesDataJob
    intent: >-
      Inspect the phone number types job’s state, counters and lifecycle
      details.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readPhoneNumberTypesBySourceKey
    intent: >-
      Resolve producer keys to current saved phone number types through this
      collection’s authority checks.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listPhoneNumberTypesDataJobResults
    intent: Page recorded item outcomes for the phone number types job.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listPhoneNumberTypesDataJobRejections
    intent: >-
      Page refusal evidence for the phone number types job in input-position
      order.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyPhoneNumberTypesDataJob
    intent: >-
      Approve a validated phone number types job using its saved impact digest
      and any required deletion phrase.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pausePhoneNumberTypesDataJob
    intent: Hold queued or active phone number types work at its batch boundary.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumePhoneNumberTypesDataJob
    intent: Requeue unfinished batches from a paused phone number types job.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelPhoneNumberTypesDataJob
    intent: Abandon future phone number types batches and retain committed changes.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryPhoneNumberTypesDataJob
    intent: Take up eligible paused or dependency-blocked phone number types work.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidatePhoneNumberTypesDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished phone number types job.
    access: console
    permission: >-
      crm.phone-number-types.bulk and one of crm.phone-number-types.update or
      crm.phone-number-types.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitRegionsDataJob
    intent: Create a regions job from the input forms this collection supports.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listRegionsDataJobs
    intent: Page accessible regions jobs using the supported filters.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getRegionsDataJob
    intent: 'Inspect the regions job’s state, counters and lifecycle details.'
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readRegionsBySourceKey
    intent: >-
      Resolve producer keys to current saved regions through this collection’s
      authority checks.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listRegionsDataJobResults
    intent: Page recorded item outcomes for the regions job.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listRegionsDataJobRejections
    intent: Page refusal evidence for the regions job in input-position order.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyRegionsDataJob
    intent: >-
      Approve a validated regions job using its saved impact digest and any
      required deletion phrase.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-002
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseRegionsDataJob
    intent: Hold queued or active regions work at its batch boundary.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeRegionsDataJob
    intent: Requeue unfinished batches from a paused regions job.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelRegionsDataJob
    intent: Abandon future regions batches and retain committed changes.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryRegionsDataJob
    intent: Take up eligible paused or dependency-blocked regions work.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateRegionsDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished regions job.
    access: console
    permission: crm.regions.bulk and crm.regions.update
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitActivityTypesDataJob
    intent: Create a activity types job from the input forms this collection supports.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listActivityTypesDataJobs
    intent: Page accessible activity types jobs using the supported filters.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getActivityTypesDataJob
    intent: 'Inspect the activity types job’s state, counters and lifecycle details.'
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readActivityTypesBySourceKey
    intent: >-
      Resolve producer keys to current saved activity types through this
      collection’s authority checks.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listActivityTypesDataJobResults
    intent: Page recorded item outcomes for the activity types job.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listActivityTypesDataJobRejections
    intent: Page refusal evidence for the activity types job in input-position order.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyActivityTypesDataJob
    intent: >-
      Approve a validated activity types job using its saved impact digest and
      any required deletion phrase.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-002
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseActivityTypesDataJob
    intent: Hold queued or active activity types work at its batch boundary.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeActivityTypesDataJob
    intent: Requeue unfinished batches from a paused activity types job.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelActivityTypesDataJob
    intent: Abandon future activity types batches and retain committed changes.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryActivityTypesDataJob
    intent: Take up eligible paused or dependency-blocked activity types work.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateActivityTypesDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished activity types job.
    access: console
    permission: crm.activity-types.bulk and crm.activity-types.update
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: submitActivitiesDataJob
    intent: Create a activities job from the input forms this collection supports.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-001
      - CAP-PFM-DJE-007
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: listActivitiesDataJobs
    intent: Page accessible activities jobs using the supported filters.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-005
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: getActivitiesDataJob
    intent: 'Inspect the activities job’s state, counters and lifecycle details.'
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-002
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: readActivitiesBySourceKey
    intent: >-
      Resolve producer keys to current saved activities through this
      collection’s authority checks.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-015
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listActivitiesDataJobResults
    intent: Page recorded item outcomes for the activities job.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: listActivitiesDataJobRejections
    intent: Page refusal evidence for the activities job in input-position order.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-005
      - CAP-PFM-DJE-003
    published_to_submissions: 'not published: a read of job evidence, not a business operation'
  - operation_id: applyActivitiesDataJob
    intent: >-
      Approve a validated activities job using its saved impact digest and any
      required deletion phrase.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-002
      - CAP-PFM-DJE-007
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: pauseActivitiesDataJob
    intent: Hold queued or active activities work at its batch boundary.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: resumeActivitiesDataJob
    intent: Requeue unfinished batches from a paused activities job.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: cancelActivitiesDataJob
    intent: Abandon future activities batches and retain committed changes.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-004
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: retryActivitiesDataJob
    intent: Take up eligible paused or dependency-blocked activities work.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-004
      - CAP-PFM-DJE-012
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
  - operation_id: revalidateActivitiesDataJobConflicts
    intent: >-
      Create a new preview from eligible conflicts and associated group refusals
      in a finished activities job.
    access: console
    permission: >-
      crm.activities.bulk and one of crm.activities.update or
      crm.activities.delete
    realises:
      - CAP-PFM-DJE-006
    published_to_submissions: >-
      not published: staff bulk administration of existing records, not a
      capture a Submission Form makes
events:
  - name: Domain-owned record change events
    direction: produced
    when: >-
      A successful domain save emits its usual record event under the current
      job and batch context.
    payload_summary: The domain event includes attribution to the executing job and batch.
jobs:
  - name: crm_data_job_dispatcher
    kind: schedule (every minute) and nudge
    does: >-
      Lease queued batches by workspace and publish them to their lane’s
      transport.
  - name: crm_data_job_worker
    kind: queue consumer (interactive lane)
    does: >-
      Resolve the initiating caller and process interactive messages, with
      failed delivery handling.
  - name: crm-bulk-data-job (state machine) with crm_bulk_data_job_task
    kind: state machine
    does: >-
      Drive file chunking, planning, admission and settlement, including
      execution failure consequences.
  - name: crm_data_job_bulk_worker
    kind: queue consumer (bulk lane)
    does: Read chunk input and apply each admitted file batch.
  - name: data job submission purge (inside crm_job_reconciler)
    kind: 'schedule (every five minutes, purge hour 04:00 UTC)'
    does: >-
      Visit workspace ledgers during the purge hour and remove old submission
      keys.
integrations:
  - system: Platform data-jobs bucket and upload sessions
    direction: inbound
    contract: >-
      Resolve shared upload records with the read role and consume their exact
      stored versions.
  - system: Capacity state (cache and parameter)
    direction: inbound
    contract: Use the shared admission reader for the published bulk factor.
  - system: Data runs (Platform)
    direction: inbound
    contract: >-
      Accept ordinary dataset routes from staff-driven migration runs using the
      current caller token.
consistency:
  - rule: >-
      Interactive submission stores its job family and optional submission key
      in one transaction.
    kind: transactional
    compensation: Roll back unsuccessful submission without retained partial work.
  - rule: >-
      An item’s domain write commits with its receipt, history, event and any
      keyed mapping.
    kind: transactional
    compensation: Refused items leave no partial domain commit.
  - rule: 'After commit, durable dispatch hands batches to lane transport.'
    kind: eventual
    compensation: >-
      The minute schedule recovers a lost nudge; transport retries failed
      deliveries and dead-letters exhausted work.
  - rule: Settlement recalculates outcome counts from durable receipts and refusals.
    kind: eventual
    compensation: Recounting repairs summary caches at settlement and requeue boundaries.
  - rule: >-
      Contact and organization update rollback is explicit compensation; imports
      and configuration provide none.
    kind: eventual
    compensation: >-
      Only eligible version-protected records are restored; exclusions retain
      their current values.
evidence:
  - >-
    services-crm at a8d1364f: modules/data-jobs/aws/api/data-jobs.routes.ts,
    organization-data-jobs.routes.ts, bulk-data-jobs.routes.ts,
    records-by-source-key.routes.ts, data-jobs.schemas.ts,
    bulk-data-jobs.schemas.ts; aws/data-jobs.module.ts, aws/logic/*.ts,
    aws/resources/*.ts; services/jobs/**, services/queue/**,
    services/operations/**, services/imports/**, services/persistence/**;
    db/data-jobs.table.ts, bulk-data-jobs.table.ts; docs/data-jobs.md.
  - >-
    The 124 operations above are every route the module declares at the pinned
    commit: 14 on contacts, 14 on organizations and 12 for each of eight further
    record kinds generated by the route factory; they match the module's indexed
    operation catalogue one for one.
controls: [TC-AVL-001, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-AZ-006, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-CHG-007, TC-CRY-001, TC-CRY-002, TC-CRY-003, TC-CRY-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-DAT-005, TC-DAT-006, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-MON-002, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-PRV-004, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# CRM Data Jobs

## What This Service Is For

CRM hosts the shared engine for ten record collections. It exposes bulk administration and keyed reconciliation while providing operation declarations, tables, transport workers and file orchestration.

## Boundary

Business records remain with their CRM owners. Platform provides uploads and capacity publication, and workspace lifecycle orchestrates reset. The shared library determines common job processing.

## Operations in Words

Collection routes support submission, inspection, controls and conflict revalidation. Contacts and organizations also provide spreadsheet targets and update rollback. Contacts inspection can read other CRM job categories, which the console uses for its combined list. Route authorization requires the exact collection bulk key plus its declared record-key combination; the domain operation then requires the relevant action permission.

File and request input use one collection address where supported. Keyed reconciliation returns current saved records. No route declares a Submissions binding.

## Events and Jobs

A scheduled dispatcher and its immediate nudge publish batches. Separate interactive and file workers execute them, while durable file tasks manage admission and settlement. Reconciliation also runs the submission-key purge. Business change events originate with record persistence, and no model task is invoked here.

## Consistency Guarantees

Each submission and item has a transaction boundary, while transport and orchestration are eventual. The receipt protects repeated execution of one item. Producer-key uniqueness across independent first deliveries and file-wide grouping remain weaker than their intended guarantees.
