---
id: ATS-ACC-BAT-009
scope: CAP-ACC-BAT-009
product_area: accounting
module: batches
revision: 2
status: proposed
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
  rhythm-v2-docs: 37405d50d1465ea0571a66095d98ebec4db04175
scenarios:
  - id: ATS-ACC-BAT-009-01
    title: Recurring ownership and schedule identity stay fixed
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-01
      - INV-DOM-ACC-BAT-001-09
    preconditions: A recurring configuration belongs to the selected unit.
    steps: >-
      Replace it with another unit and directly change its unit or schedule
      reference.
    expected: >-
      Replacement returns 409; both direct changes trigger the database
      immutability refusal.
    negative: true
    data_needs: Provide two units.
    bound_to:
      - TST-ACC-BAT-061
      - TST-ACC-BAT-066
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 to a change of business unit
    category: invariant
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        409 to a change of business unit
      - >-
        services-accounting:modules/batches/tests/integration/db/batches.table.integration.spec.js#refuses
        a change of business_unit_id (RHF01)
      - >-
        services-accounting:modules/batches/tests/integration/db/batches.table.integration.spec.js#refuses
        a change of schedule_id (RHF01)
  - id: ATS-ACC-BAT-009-02
    title: Creation validates schedule and reference
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-02
    preconditions: No special setup is necessary.
    steps: >-
      Omit the schedule, create Daily credit cards without a reference and
      repeat that creation.
    expected: >-
      The omission identifies schedule; allocation produces daily_credit_cards;
      reuse identifies the conflicting reference.
    negative: true
    data_needs: Provide no fixtures beyond the stated setup.
    bound_to:
      - TST-ACC-BAT-061
      - TST-ACC-BAT-089
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 naming schedule to a body without one
    category: rule
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        400 naming schedule to a body without one
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        400 to a name whose id the tenant already has
      - >-
        services-accounting:modules/batches/tests/integration/services/persistence/recurring-batches.integration.spec.js#answers
        the whole record under the id its name suggests, with its schedule
        inline and its next run
  - id: ATS-ACC-BAT-009-03
    title: Rolls cannot occur more than daily
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-03
    preconditions: No special setup is necessary.
    steps: Submit an hourly recurrence and check whether it was saved.
    expected: The library validation returns 400 without writing a record.
    negative: true
    data_needs: Provide no fixtures beyond the stated setup.
    bound_to:
      - TST-ACC-BAT-061
      - TST-ACC-BAT-089
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 to a schedule that would run more often than once a day
    category: boundary
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        400 to a schedule that would run more often than once a day
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#writes
        no recurring batch for that refused create: its id reads back 404
      - >-
        services-accounting:modules/batches/tests/integration/services/persistence/recurring-batches.integration.spec.js#refuses
        a schedule that would run more often than once every 24 hours, leaving
        the recurring batch and its schedule unchanged
  - id: ATS-ACC-BAT-009-04
    title: Templates accept only the supported language and variables
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-04
    preconditions: No special setup is necessary.
    steps: >-
      Submit invalid Liquid, an unknown code-template variable and an
      earlier-product template.
    expected: Each 400 identifies the affected template field.
    negative: true
    data_needs: Provide no fixtures beyond the stated setup.
    bound_to:
      - TST-ACC-BAT-061
      - TST-ACC-BAT-131
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 naming batch_code_template to a template using a variable a batch
      template does not provide
    category: validation
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        400 naming batch_name_template to a template Liquid cannot read
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        400 naming batch_code_template to a template using a variable a batch
        template does not provide
      - >-
        services-accounting:modules/batches/tests/unit/rules/recurring-batch-rules.spec.js#refuse
        Rhythm 1.0’s Handlebars helper, naming the field
  - id: ATS-ACC-BAT-009-05
    title: Activation attempts immediate intake
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-06
    preconditions: One unit covers today in its calendar and another does not.
    steps: >-
      Create active configurations in both, then deactivate and reactivate the
      first.
    expected: >-
      The valid unit receives today’s Open batch; the other retains a
      first-batch refusal without a batch; reactivation attempts a new first
      batch.
    negative: true
    data_needs: Provide fiscal years.
    bound_to:
      - TST-ACC-BAT-060
      - TST-ACC-BAT-116
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#saves
      a recurring batch whose first batch is refused, with the refusal and no
      batch
    category: transition
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/batches.e2e.spec.js#answers
        the recurring batch’s first batch as its active batch: open, named for
        today, of the recurring batch
      - >-
        services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#opens
        the first batch at once, from the plan, its occurrence the create’s
        instant
      - >-
        services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#saves
        a recurring batch whose first batch is refused, with the refusal and no
        batch
      - >-
        services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#opens
        the first batch when an inactive recurring batch is reactivated
  - id: ATS-ACC-BAT-009-06
    title: Inactive recurrence leaves current intake usable
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-07
    preconditions: >-
      An active configuration has an Open batch and a schedule paused after five
      failures.
    steps: >-
      Deactivate the configuration, inspect its next run, then reactivate and
      inspect scheduling again.
    expected: >-
      Deactivation removes the next run; reactivation restores scheduling and
      clears the pause and failure count.
    negative: false
    data_needs: Provide assignment settings naming the recurring batch.
    bound_to:
      - TST-ACC-BAT-061
      - TST-ACC-BAT-089
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      no next run once deactivated
    note: >-
      Intake through inactive configuration is specified separately as an
      interaction and is not executed by these scheduling assertions.
    category: interaction
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        no next run once deactivated
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        the next run again once reactivated
      - >-
        services-accounting:modules/batches/tests/integration/services/persistence/recurring-batches.integration.spec.js#enables
        the schedule, clearing the pause and the failure count
  - id: ATS-ACC-BAT-009-07
    title: Replacement requires the current version
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-08
    preconditions: The configuration currently rolls in late afternoon.
    steps: >-
      Replace it with a later time using the current version, then the old
      version and then no version.
    expected: >-
      The first updates scheduling and its description; stale and absent
      versions return 409 and 400.
    negative: true
    data_needs: Provide no fixtures beyond the stated setup.
    bound_to:
      - TST-ACC-BAT-061
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 StaleObject to a replacement at the version first read
    category: concurrency
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#moves
        the next run and the sentence to the new time, where they were 5 PM
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        409 StaleObject to a replacement at the version first read
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        400 to a replacement without sys_version
  - id: ATS-ACC-BAT-009-08
    title: Assignment references prevent deletion
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-09
      - INV-DOM-ACC-BAT-001-11
    preconditions: The default and two ordered assignment rules reference the configuration.
    steps: Delete the recurring configuration.
    expected: A 409 identifies the default and rule positions and retains its schedule.
    negative: true
    data_needs: Provide batch assignment settings.
    bound_to:
      - TST-ACC-BAT-061
      - TST-ACC-BAT-089
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 naming the settings and how they name it
    category: interaction
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        409 naming the settings and how they name it
      - >-
        services-accounting:modules/batches/tests/integration/services/persistence/recurring-batches.integration.spec.js#refuses
        409 for the default, saying the settings name it as their default and in
        which rule
      - >-
        services-accounting:modules/batches/tests/integration/services/persistence/recurring-batches.integration.spec.js#refuses
        409 for a recurring batch two rules name, listing their positions
  - id: ATS-ACC-BAT-009-09
    title: Deletion removes only unused configuration
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-10
    preconditions: >-
      An unused configuration has schedule history and an empty eligible active
      batch.
    steps: >-
      Delete the unused configuration and inspect its schedule, run history and
      active batch.
    expected: >-
      The unused configuration, its schedule and history and its empty active
      batch are absent.
    negative: true
    data_needs: Provide a rolled batch with a document.
    bound_to:
      - TST-ACC-BAT-089
      - TST-ACC-BAT-116
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#takes
      its empty active batch with it
    note: Refusal while an older generated batch remains needs separate proof.
    category: transition
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/integration/services/persistence/recurring-batches.integration.spec.js#deletes
        its schedule’s run history
      - >-
        services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#takes
        its empty active batch with it
  - id: ATS-ACC-BAT-009-10
    title: Recurring configuration prevents unit deletion
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-11
    preconditions: The unit owns a recurring configuration.
    steps: Delete the business unit.
    expected: A reference conflict returns 409 and preserves the unit.
    negative: true
    data_needs: Provide no fixtures beyond the stated setup.
    bound_to:
      - TST-ACC-BAT-061
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 naming recurring batches
    category: invariant
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
        409 naming recurring batches
      - >-
        services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#keeps
        the unit
  - id: ATS-ACC-BAT-009-11
    title: Application and write access are distinct
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-12
    preconditions: >-
      A reader can use Accounting while another principal lacks application
      access.
    steps: >-
      As the reader, list, read, inspect runs and preview, then create, replace
      and delete; as the other principal, list.
    expected: >-
      Reader requests succeed only for reads; writes return permission 403 and
      the other principal receives application-access 403.
    negative: true
    data_needs: Provide security fixtures.
    bound_to:
      - TST-ACC-BAT-059
    provenance: test
    source: >-
      services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#is
      refused the create 403 permission_missing
    category: permission
    test_evidence:
      - >-
        services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#lists
        the recurring batches
      - >-
        services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#is
        refused the create 403 permission_missing
      - >-
        services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#is
        refused the replacement 403 permission_missing
      - >-
        services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#is
        refused the delete 403 permission_missing
      - >-
        services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#is
        refused the recurring batch list 403 app_not_permitted, however broad
        its other grant
  - id: ATS-ACC-BAT-009-12
    title: Rendering respects the subject limit
    level: unit
    proves:
      - BR-CAP-ACC-BAT-009-14
    preconditions: A template would produce an oversized label.
    steps: Render the next batch’s name and reference code.
    expected: Output beyond the renderer’s subject boundary is refused.
    negative: true
    data_needs: Provide fixtures appropriate to the stated accounting context.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/batches/services/rules/recurring-batch-rules.ts:renderBatchTemplate
    category: boundary
    test_evidence: []
  - id: ATS-ACC-BAT-009-13
    title: Deleting unused intake clears the stream
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-BAT-006-06
      - BR-CAP-ACC-BAT-009-06
    exercises:
      - CAP-ACC-BAT-009
      - CAP-ACC-BAT-006
    workflows: []
    preconditions: A stream points to an unused Open batch.
    steps: 'Delete the batch, read the stream and deliver its next roll.'
    expected: >-
      The first read has no active reference; the roll supplies a new Open
      intake batch.
    negative: false
    data_needs: >-
      An isolated workspace with the stated business-unit calendar, documents
      and configuration.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/integration/services/persistence/batches.integration.spec.js#deletes
      the batch a recurring batch names as its active batch and clears the
      reference (DEF-ACT-0012);
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#saves
      a recurring batch whose first batch is refused, with the refusal and no
      batch
  - id: ATS-ACC-BAT-009-14
    title: Inactive intake survives until reactivation
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-07
      - BR-CAP-ACC-BAT-010-09
    exercises:
      - CAP-ACC-BAT-009
      - CAP-ACC-BAT-010
    workflows:
      - WF-ACC-BAT-003
    preconditions: A stream has an Open active batch.
    steps: >-
      Deactivate it, deliver a stale occurrence, then reactivate with the
      current version.
    expected: >-
      The stale occurrence opens nothing; reactivation attempts a first batch
      and returns its result.
    negative: false
    data_needs: >-
      An isolated workspace with the stated business-unit calendar, documents
      and configuration.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      no next run once deactivated;
      services-accounting:modules/batches/services/roll/recurring-batch-roll.ts
  - id: ATS-ACC-BAT-009-15
    title: Routing references prevent stream removal
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-09
      - BR-CAP-ACC-BAT-011-11
    exercises:
      - CAP-ACC-BAT-009
      - CAP-ACC-BAT-011
    workflows: []
    preconditions: Routing names Daily as its default and Cards in its first rule.
    steps: >-
      Try deleting both streams, remove routing and repeat deletion with unused
      intake.
    expected: >-
      The referenced deletes return 409; after routing removal the unused
      streams can be deleted.
    negative: true
    data_needs: >-
      An isolated workspace with the stated business-unit calendar, documents
      and configuration.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 naming the settings and how they name it;
      services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#is
      refused the save 403 permission_missing
  - id: ATS-ACC-BAT-009-16
    title: Reactivation and rolling have distinct posting effects
    category: interaction
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-06
      - BR-CAP-ACC-BAT-013-03
    exercises:
      - CAP-ACC-BAT-009
      - CAP-ACC-BAT-013
    workflows:
      - WF-ACC-BAT-003
    preconditions: Two inactive streams each retain a populated Open predecessor.
    steps: >-
      Reactivate the first and roll the second after activation using separate
      fixtures.
    expected: >-
      Reactivation can retire intake without a posting request; the subsequent
      roll records the predecessor’s posting request or refusal.
    negative: true
    data_needs: >-
      An isolated workspace with the stated business-unit calendar, documents
      and configuration.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#saves
      a recurring batch whose first batch is refused, with the refusal and no
      batch;
      services-accounting:modules/batches/tests/e2e/batch-postings.e2e.spec.js#posts
      a batch as a durable job: the answer is the job, and the job posts the
      batch
  - id: ATS-ACC-BAT-009-17
    title: Recurring pagination exposes the supported maximum
    category: boundary
    level: api
    proves:
      - BR-CAP-ACC-BAT-009-13
    preconditions: An isolated unit owns two hundred one matching recurring configurations.
    steps: >-
      Request a page of two hundred, follow its cursor and request more than the
      supported limit.
    expected: >-
      The first page contains two hundred distinct records and the next contains
      the remaining record; oversized requests never return more than two
      hundred records.
    negative: true
    data_needs: >-
      Owned records in an isolated workspace with the stated calendar and
      accounting setup.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 to a limit above 200
evidence:
  - services-accounting at f47cb263: 'Inspected references: scenario-bound tests in modules/batches/tests.'
  - >-
    Pinned design objects, state models and workflows identify invariant and
    interaction obligations; scenario test anchors remain in test_evidence.
product_intent: proposed
coverage:
  rule: covered
  transition: 'gap: FND-ACC-BAT-063'
  validation: covered
  permission: 'gap: FND-ACC-BAT-063'
  edge: 'gap: FND-ACC-BAT-063'
  failure: 'gap: FND-ACC-BAT-063'
  boundary: covered
  concurrency: covered
  invariant: covered
  interaction: covered
coverage_notes:
  rule: >-
    Paused and inactive deletion, deactivation without losing intake, permission
    refusals for every read surface, exact list limits and renderer limits need
    proof.
  edge: >-
    Paused and inactive deletion, deactivation without losing intake, permission
    refusals for every read surface, exact list limits and renderer limits need
    proof.
  failure: >-
    Paused and inactive deletion, deactivation without losing intake, permission
    refusals for every read surface, exact list limits and renderer limits need
    proof.
rule_coverage:
  - rule: BR-CAP-ACC-BAT-009-01
    scenarios:
      - ATS-ACC-BAT-009-01
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 to a change of business unit
  - rule: BR-CAP-ACC-BAT-009-02
    scenarios:
      - ATS-ACC-BAT-009-02
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 naming schedule to a body without one
  - rule: BR-CAP-ACC-BAT-009-03
    scenarios:
      - ATS-ACC-BAT-009-03
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 to a schedule that would run more often than once a day
  - rule: BR-CAP-ACC-BAT-009-04
    scenarios:
      - ATS-ACC-BAT-009-04
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 naming batch_code_template to a template using a variable a batch
      template does not provide
  - rule: BR-CAP-ACC-BAT-009-06
    scenarios:
      - ATS-ACC-BAT-009-05
      - ATS-ACC-BAT-009-13
      - ATS-ACC-BAT-009-16
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#saves
      a recurring batch whose first batch is refused, with the refusal and no
      batch
  - rule: BR-CAP-ACC-BAT-009-07
    scenarios:
      - ATS-ACC-BAT-009-06
      - ATS-ACC-BAT-009-14
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      no next run once deactivated
  - rule: BR-CAP-ACC-BAT-009-08
    scenarios:
      - ATS-ACC-BAT-009-07
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 StaleObject to a replacement at the version first read
  - rule: BR-CAP-ACC-BAT-009-09
    scenarios:
      - ATS-ACC-BAT-009-08
      - ATS-ACC-BAT-009-15
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 naming the settings and how they name it
  - rule: BR-CAP-ACC-BAT-009-10
    scenarios:
      - ATS-ACC-BAT-009-09
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#takes
      its empty active batch with it
  - rule: BR-CAP-ACC-BAT-009-11
    scenarios:
      - ATS-ACC-BAT-009-10
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      409 naming recurring batches
  - rule: BR-CAP-ACC-BAT-009-12
    scenarios:
      - ATS-ACC-BAT-009-11
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/batches-security.e2e.spec.js#is
      refused the create 403 permission_missing
  - rule: BR-CAP-ACC-BAT-009-13
    scenarios:
      - ATS-ACC-BAT-009-17
    provenance: proposed
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      400 to a limit above 200
  - rule: BR-CAP-ACC-BAT-009-14
    scenarios:
      - ATS-ACC-BAT-009-12
    provenance: proposed
    source: >-
      services-accounting:modules/batches/services/rules/recurring-batch-rules.ts
      (renderer contract in file header)
transition_coverage:
  - state_model: STATE-ACC-BAT-002
    transition: 1
    from: inactive
    to: active
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: >-
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#saves
      a recurring batch whose first batch is refused, with the refusal and no
      batch
    note: >-
      The existing scenario set is not an exhaustive proof of this transition
      and all its side effects.
  - state_model: STATE-ACC-BAT-002
    transition: 2
    from: active
    to: inactive
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: >-
      services-accounting:modules/batches/tests/e2e/recurring-batches.e2e.spec.js#answers
      no next run once deactivated
    note: >-
      The existing scenario set is not an exhaustive proof of this transition
      and all its side effects.
  - state_model: STATE-ACC-BAT-002
    transition: 4
    from: paused
    to: inactive
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: >-
      services-accounting:modules/batches/services/persistence/recurring-batches.ts:updateRecurringBatch
    note: >-
      The existing scenario set is not an exhaustive proof of this transition
      and all its side effects.
  - state_model: STATE-ACC-BAT-002
    transition: 5
    from: active
    to: deleted
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: >-
      services-accounting:modules/batches/tests/integration/services/roll/batch-roller.integration.spec.js#takes
      its empty active batch with it
    note: >-
      The existing scenario set is not an exhaustive proof of this transition
      and all its side effects.
  - state_model: STATE-ACC-BAT-002
    transition: 6
    from: inactive
    to: deleted
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: >-
      services-accounting:modules/batches/services/persistence/recurring-batches.ts
      (header, delete)
    note: >-
      The existing scenario set is not an exhaustive proof of this transition
      and all its side effects.
  - state_model: STATE-ACC-BAT-002
    transition: 7
    from: paused
    to: deleted
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: >-
      services-accounting:modules/batches/services/persistence/recurring-batches.ts
      (header, delete)
    note: >-
      The existing scenario set is not an exhaustive proof of this transition
      and all its side effects.
permission_coverage:
  - key: accounting.recurring-batches.read
    surface: api
    scenarios:
      - ATS-ACC-BAT-009-11
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: FND-ACC-BAT-063
    note: >-
      An aggregate persona check does not establish exhaustive allow and deny
      proof for every named surface.
  - key: accounting.recurring-batches.create
    surface: api
    scenarios:
      - ATS-ACC-BAT-009-11
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: FND-ACC-BAT-063
    note: >-
      An aggregate persona check does not establish exhaustive allow and deny
      proof for every named surface.
  - key: accounting.recurring-batches.update
    surface: api
    scenarios:
      - ATS-ACC-BAT-009-11
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: FND-ACC-BAT-063
    note: >-
      An aggregate persona check does not establish exhaustive allow and deny
      proof for every named surface.
  - key: accounting.recurring-batches.delete
    surface: api
    scenarios:
      - ATS-ACC-BAT-009-11
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: FND-ACC-BAT-063
    note: >-
      An aggregate persona check does not establish exhaustive allow and deny
      proof for every named surface.
  - key: accounting.application.access
    surface: api
    scenarios:
      - ATS-ACC-BAT-009-11
    gap: FND-ACC-BAT-063
    provenance: unknown
    source: FND-ACC-BAT-063
    note: >-
      An aggregate persona check does not establish exhaustive allow and deny
      proof for every named surface.
executable_coverage:
  bound_scenarios: 11
  unbound_scenarios:
    - ATS-ACC-BAT-009-12
    - ATS-ACC-BAT-009-13
    - ATS-ACC-BAT-009-14
    - ATS-ACC-BAT-009-15
    - ATS-ACC-BAT-009-16
    - ATS-ACC-BAT-009-17
  gap: FND-ACC-BAT-063
---

# Configure recurring batch streams: Capability Test Specification

## Coverage

The scenarios define focused checks for this outcome. The coverage map distinguishes specified checks from unresolved proof; executable bindings identify inspected assertions and carry no execution result.

| Rule | Proof Specification or Gap |
|---|---|
| `BR-CAP-ACC-BAT-009-01` | `ATS-ACC-BAT-009-01` |
| `BR-CAP-ACC-BAT-009-02` | `ATS-ACC-BAT-009-02` |
| `BR-CAP-ACC-BAT-009-03` | `ATS-ACC-BAT-009-03` |
| `BR-CAP-ACC-BAT-009-04` | `ATS-ACC-BAT-009-04` |
| `BR-CAP-ACC-BAT-009-06` | `ATS-ACC-BAT-009-05`, `ATS-ACC-BAT-009-13`, `ATS-ACC-BAT-009-16` |
| `BR-CAP-ACC-BAT-009-07` | `ATS-ACC-BAT-009-06`, `ATS-ACC-BAT-009-14` |
| `BR-CAP-ACC-BAT-009-08` | `ATS-ACC-BAT-009-07` |
| `BR-CAP-ACC-BAT-009-09` | `ATS-ACC-BAT-009-08`, `ATS-ACC-BAT-009-15` |
| `BR-CAP-ACC-BAT-009-10` | `ATS-ACC-BAT-009-09` |
| `BR-CAP-ACC-BAT-009-11` | `ATS-ACC-BAT-009-10` |
| `BR-CAP-ACC-BAT-009-12` | `ATS-ACC-BAT-009-11` |
| `BR-CAP-ACC-BAT-009-13` | `ATS-ACC-BAT-009-17` |
| `BR-CAP-ACC-BAT-009-14` | `ATS-ACC-BAT-009-12` |

## Interactions With Related Capabilities

Deleting unused intake clears the stream. Inactive intake survives until reactivation. Routing references prevent stream removal. Reactivation and rolling have distinct posting effects. These checks use the related capability’s outcome as part of the setup or verification. Unbound interactions remain proposed until a suite executes the complete chain.
