Skip to content

CAP-PFM-DJE-001Submit an accountable change across many records

Markdown

CAP-PFM-DJE-001

Submit an accountable change across many records

Markdown
  • DocumentDraft
  • Product intentConfirmed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleData Job EngineRevision1

Read atmacroservice-libraries 54536a44services-crm a8d1364fservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
A job retains the submitted records and changes for later processing.Retrying a keyed submission returns the existing job.Bulk work uses the authority of its submitter.
Surfaces
consoleapi
Intent sources
services-platform:docs/milestones/PLAT-M19-data-job-engine-foundations.md#D-37services-platform:docs/milestones/plans/PLAT-M19-plan.md#A1services-platform:docs/milestones/plans/PLAT-M19-plan.md#A8services-platform:docs/milestones/plans/PLAT-M19-plan.md#S01services-platform:docs/milestones/PLAT-M19-data-job-engine-foundations.md#Status

Controls

29 controls apply, from the corpus control catalogue.

TC-AVL-001 TC-AVL-004 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-DAT-004 TC-IAM-001 TC-IAM-006 TC-LOG-004 TC-LOG-005 TC-MON-001 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-004 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-TEN-004 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
crm.contacts.bulkapitenant
crm.organizations.bulkapitenant
crm.contact-types.bulkapitenant
crm.contact-roles.bulkapitenant
crm.organization-types.bulkapitenant
crm.address-types.bulkapitenant
crm.phone-number-types.bulkapitenant
crm.regions.bulkapitenant
crm.activity-types.bulkapitenant
crm.activities.bulkapitenant
crm.contacts.updateapitenant
crm.contacts.deleteapitenant
crm.organizations.updateapitenant
crm.organizations.deleteapitenant
platform.custom-fields.bulkapitenant

Business Rules

10 rules, 9 to be proved before approval. A rule's product intent is derived from its origin: 10 confirmed by a product decision, the rest inheriting this capability's confirmed.

IdRuleKindEnforced atProvenance
01must prove
Confirmed
A caller submitting or controlling a job needs both the bulk permission for its record kind and the operation permission, such as update or delete; holding either alone is insufficient.
permissionapi, servicetest
services-crm:modules/data-jobs/tests/e2e/data-jobs.e2e.spec.js#refuses a caller who may update one contact but holds no bulk key with 403
02must prove
Confirmed
An interactive request contains either at most 500 selected record identifiers with a common change or at most 500 prepared records; larger inputs use a file.
validationapi, servicetest
services-crm:modules/data-jobs/tests/e2e/organization-update.e2e.spec.js#refuses a selection past the interactive lane’s 500 with 400
03must prove
Confirmed
A common change can address only declared editable fields, including permitted custom fields; system fields, collections and undeclared fields are refused by name before processing.
validationapi, servicetest
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#refuses a field the bulk update may not set, naming it, before any contact is touched
04must prove
Confirmed
The job stores its selected records and submitted changes so later processing uses that saved input.
invariantservice, databasetest
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#freezes the patch on every item, so a later apply writes what was submitted and not what is asked for then
05must prove
Confirmed
For 30 days, the same submitter can repeat an idempotency key with the same request to retrieve its original job; reusing the key for a different request is refused.
policyservice, databasetest
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#answers the second submission with the first job, having written nothing
06must prove
Confirmed
A submission must name a declared record kind and operation; an unsupported choice is refused with the supported choices.
validationapi, servicetest
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#refuses an object type CRM performs no bulk operation on, naming what it does perform
07must prove
Confirmed
CRM interactive submissions accept updates and deletes by Rhythm identifier; creating records or matching producer keys requires the file lane.
validationapiobserved
08must prove
Confirmed
A collection exposes only jobs for its own record kind; a mismatched job is not found, as is a job in another workspace.
invariantservicetest
services-crm:modules/data-jobs/tests/integration/services/jobs/configuration-data-jobs.integration.spec.js#is not found by the apply, so a validated job of contacts cannot be started from here
09must prove
Confirmed
Jobs, their input and their outcomes remain private to their workspace, including when another workspace attempts to run them.
invariantservice, databasetest
10
Confirmed
Submission records the job, input, batches, durable queue entries and any idempotency entry in one transaction; failure rolls back those writes.
invariantservice, databasedocumented
macroservice-libraries:packages/data-jobs/README.md#A worked example: updating contacts in bulk

Scenarios

IdGivenWhenThenProvenance
01An administrator with contact bulk and update access selects 120 contacts.They request the same job-title change for that selection.Rhythm records one job, its 120 input records and five batches of 25.documented
macroservice-libraries:packages/data-jobs/README.md#A worked example: updating contacts in bulk
02A network timeout causes a caller to resend the same keyed submission.Rhythm receives the repeated request.The response identifies the original job without creating more work.test
services-crm:modules/data-jobs/tests/integration/services/jobs/contact-data-jobs.integration.spec.js#answers the second submission with the first job, having written nothing

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.