---
id: ATS-ACC-BKS-013
scope: CAP-ACC-BKS-013
product_area: accounting
module: books
revision: 2
status: proposed
approved_by: null
approved_at: null
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
scenarios:
  - id: ATS-ACC-BKS-013-01
    title: Resolve payable accounts at posting
    level: browser
    proves:
      - BR-CAP-ACC-BKS-013-02
    preconditions: 'One unit has a rate mapping, another only a default and another neither.'
    steps: Post taxed documents in those units.
    expected: >-
      Posting selects mapping then default, and reports a document error for the
      missing destination.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-017
      - TST-ACC-BKS-014
    provenance: test
    source: >-
      react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0022.spec.ts#ACT-ACC-0022
    category: rule
    binding_evidence:
      - >-
        react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0022.spec.ts#ACT-ACC-0022
      - >-
        react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0019.spec.ts#ACT-ACC-0019
  - id: ATS-ACC-BKS-013-02
    title: Validate criteria for each zone kind
    level: unit
    proves:
      - BR-CAP-ACC-BKS-013-03
    preconditions: No saved zone is required.
    steps: >-
      Check matching and foreign-kind criteria, unequal or reversed postal
      ranges and oversized lists.
    expected: >-
      Only criteria appropriate to the kind pass and normalization removes
      duplicate codes.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-175
      - TST-ACC-BKS-015
    provenance: test
    source: >-
      services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
      the criteria of another kind, and any criteria on the rest of the world
    category: validation
    binding_evidence:
      - >-
        services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
        the criteria of another kind, and any criteria on the rest of the world
      - >-
        services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
        a range with a blank end, or whose start is after its end
      - >-
        services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
        a range whose ends differ in length, naming the criterion
      - >-
        services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#stores
        the codes normalized, without duplicates, and the lists of the other
        kinds empty
      - >-
        react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0020.spec.ts#ACT-ACC-0020
  - id: ATS-ACC-BKS-013-03
    title: Bound rate definitions
    level: unit
    proves:
      - BR-CAP-ACC-BKS-013-04
    preconditions: No saved zone is required.
    steps: >-
      Validate excess rates, blank names, repeated class/unit references,
      excessive percentage precision and numeric percentages.
    expected: Each invalid entry is identified by its position.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-175
    provenance: test
    source: >-
      services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
      more than twenty rates, a blank name, a class or a unit named twice, and a
      bad percentage, each by position
    category: boundary
    binding_evidence:
      - >-
        services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
        more than twenty rates, a blank name, a class or a unit named twice, and
        a bad percentage, each by position
      - >-
        services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
        a number, a negative, more than 100, more than six places and a blank
  - id: ATS-ACC-BKS-013-04
    title: Retain issued tax after zone replacement
    level: browser
    proves:
      - BR-CAP-ACC-BKS-013-05
    preconditions: An issued invoice uses the zone’s rates.
    steps: Replace those rate definitions.
    expected: >-
      The zone receives new rate identities while the invoice retains its prior
      tax references.
    negative: false
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-060
      - TST-ACC-BKS-016
    provenance: test
    source: >-
      services-accounting:modules/books/tests/e2e/tax-zones.e2e.spec.js#answers
      200 with the version moved on and the rates rewritten whole, the first
      under a new id
    category: transition
    binding_evidence:
      - >-
        services-accounting:modules/books/tests/e2e/tax-zones.e2e.spec.js#answers
        200 with the version moved on and the rates rewritten whole, the first
        under a new id
      - >-
        react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0021.spec.ts#ACT-ACC-0021
  - id: ATS-ACC-BKS-013-05
    title: Select zones in order with a default country
    level: unit
    proves:
      - BR-CAP-ACC-BKS-013-06
    preconditions: Prioritized zones include a rest-of-world choice.
    steps: Inspect ordering and match an address without country.
    expected: >-
      Ordering follows priority and name; the country defaults to the United
      States.
    negative: false
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-060
      - TST-ACC-BKS-175
    provenance: test
    source: >-
      services-accounting:modules/books/tests/e2e/tax-zones.e2e.spec.js#answers
      every zone in the order it is tried: priority, then name
    category: rule
    binding_evidence:
      - >-
        services-accounting:modules/books/tests/e2e/tax-zones.e2e.spec.js#answers
        every zone in the order it is tried: priority, then name
      - >-
        services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#taxes
        an address with no country as the United States, as Rhythm 1.0 did
  - id: ATS-ACC-BKS-013-06
    title: Protect tax classes already referenced
    level: api
    proves:
      - BR-CAP-ACC-BKS-013-07
      - INV-DOM-ACC-BKS-006-03
    preconditions: 'A class is referenced by setup, rates and issued lines.'
    steps: >-
      Try removal in each applicable state and remove a removable zone
      dependency.
    expected: >-
      References produce named refusals; removing a zone releases its own
      dependency only.
    negative: true
    data_needs: The setup needs no extra fixture records.
    bound_to:
      - TST-ACC-BKS-100
      - TST-ACC-BKS-102
    provenance: test
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/tax-classes.integration.spec.js#translates
      the refusal of each restrict foreign key to a tax class into a 409 naming
      it, the invoice lines among them
    category: invariant
    binding_evidence:
      - >-
        services-accounting:modules/books/tests/integration/services/persistence/tax-classes.integration.spec.js#translates
        the refusal of each restrict foreign key to a tax class into a 409
        naming it, the invoice lines among them
      - >-
        services-accounting:modules/books/tests/integration/services/persistence/tax-zones.integration.spec.js#refuses
        the delete of a tax class a rate names, 409 naming the rates, and the
        class stays
      - >-
        services-accounting:modules/books/tests/integration/services/persistence/tax-zones.integration.spec.js#deletes
        the zone with its rates, and answers the class deletable after
  - id: ATS-ACC-BKS-013-07
    title: >-
      Exercise the grants for maintain tax payable mapping during the commerce
      transition
    category: permission
    level: api
    proves:
      - BR-CAP-ACC-BKS-016-01
    preconditions: >-
      An application-authorized reader and administrator share the run-owned
      setup. A third principal lacks the relevant resource grant.
    steps: >-
      Read the relevant configuration as the reader, attempt each supported
      mutation, then repeat with the matching administrator grants. Repeat the
      reads without their resource grants.
    expected: >-
      The permission outcomes match the cited authorization rule, and refused
      mutations leave every configured value unchanged.
    negative: true
    data_needs: >-
      Run-owned records for the stated setup; retain the initial values for
      comparison.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/books/tests/e2e/configuration-security.e2e.spec.js#is
      refused the create 403 permission_missing
    permissions_exercised:
      - accounting.tax-classes.read
      - accounting.tax-classes.create
      - accounting.tax-classes.update
      - accounting.tax-classes.delete
      - accounting.tax-zones.read
      - accounting.tax-zones.create
      - accounting.tax-zones.update
      - accounting.tax-zones.delete
    binding_evidence: []
    supporting_tests: []
  - id: ATS-ACC-BKS-013-08
    title: Refuse the second replacement of a shared read version
    category: concurrency
    level: api
    proves:
      - BR-CAP-ACC-BKS-016-05
    preconditions: >-
      Two administrators read the same version of the relevant mutable record.
      Each prepares a different otherwise valid replacement.
    steps: >-
      Release both replacement requests from a barrier. Read the record again
      and retry the losing payload at its original version.
    expected: >-
      One replacement commits, the other is stale, and repeating the stale
      request preserves the winning values.
    negative: true
    data_needs: >-
      Run-owned records for the stated setup; retain the initial values for
      comparison.
    bound_to: []
    provenance: proposed
    source: >-
      services-accounting:modules/books/tests/e2e/payment-terms.e2e.spec.js#answers
      400 naming is_active to a replacement that leaves it out
    interaction_with:
      - CAP-ACC-BKS-016
    binding_evidence: []
  - id: ATS-ACC-BKS-013-09
    title: Default tax mapping supplies an unmapped rate
    category: interaction
    level: browser
    proves:
      - BR-CAP-ACC-BKS-013-02
      - BR-CAP-ACC-BKS-006-02
    preconditions: >-
      Run-owned records satisfy the preconditions of the referenced capability
      proofs.
    steps: >-
      Post taxed work without a rate-specific mapping, first with the tax
      default absent and then assigned to an active local account.
    expected: >-
      The missing destination is reported before assignment and the later
      posting uses the default.
    negative: false
    data_needs: >-
      Run-owned records for the stated setup; retain the initial values for
      comparison.
    bound_to:
      - TST-ACC-BKS-017
    provenance: test
    source:
      - >-
        react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0022.spec.ts#ACT-ACC-0022
      - >-
        services-accounting:modules/books/tests/e2e/default-gl-accounts.e2e.spec.js#answers
        400 to another unit’s GL account, naming both units
    exercises:
      - CAP-ACC-BKS-013
      - CAP-ACC-BKS-006
    workflows: []
    binding_evidence:
      - >-
        react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0022.spec.ts#ACT-ACC-0022
evidence:
  - >-
    Verified source file:
    react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0019.spec.ts
  - >-
    Verified source file:
    react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0020.spec.ts
  - >-
    Verified source file:
    react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0021.spec.ts
  - >-
    Verified source file:
    react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0022.spec.ts
  - >-
    Verified source file:
    services-accounting:modules/books/tests/e2e/tax-zones.e2e.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/tax-classes.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/integration/services/persistence/tax-zones.integration.spec.js
  - >-
    Verified source file:
    services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js
product_intent: proposed
coverage:
  rule: covered
  transition: covered
  validation: covered
  permission: covered
  edge: 'gap: FND-ACC-BKS-074'
  failure: 'gap: FND-ACC-BKS-074'
  boundary: covered
  concurrency: covered
  invariant: covered
  interaction: covered
coverage_notes:
  rule:
    scenarios:
      - ATS-ACC-BKS-013-01
      - ATS-ACC-BKS-013-05
    provenance: documented
    source:
      - ATS-ACC-BKS-013-01
      - ATS-ACC-BKS-013-05
  transition:
    scenarios:
      - ATS-ACC-BKS-013-04
    provenance: documented
    source:
      - ATS-ACC-BKS-013-04
  validation:
    scenarios:
      - ATS-ACC-BKS-013-02
    provenance: documented
    source:
      - ATS-ACC-BKS-013-02
  permission:
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source:
      - ATS-ACC-BKS-013-07
  edge:
    scenarios: []
    provenance: unknown
    source: FND-ACC-BKS-074
    reason: >-
      No scenario isolates this category for the capability at the pinned
      revision.
    gap: FND-ACC-BKS-074
  failure:
    scenarios: []
    provenance: unknown
    source: FND-ACC-BKS-074
    reason: >-
      No scenario isolates this category for the capability at the pinned
      revision.
    gap: FND-ACC-BKS-074
  boundary:
    scenarios:
      - ATS-ACC-BKS-013-03
    provenance: documented
    source:
      - ATS-ACC-BKS-013-03
  concurrency:
    scenarios:
      - ATS-ACC-BKS-013-08
    provenance: documented
    source:
      - ATS-ACC-BKS-013-08
  invariant:
    scenarios:
      - ATS-ACC-BKS-013-06
    provenance: documented
    source:
      - ATS-ACC-BKS-013-06
  interaction:
    scenarios:
      - ATS-ACC-BKS-013-09
    provenance: documented
    source:
      - ATS-ACC-BKS-013-09
rule_coverage:
  - rule: BR-CAP-ACC-BKS-013-02
    scenarios:
      - ATS-ACC-BKS-013-01
      - ATS-ACC-BKS-013-09
    provenance: documented
    source: >-
      react-console:acceptance/accounting/playwright/journeys/configuration/ACT-ACC-0022.spec.ts#ACT-ACC-0022
  - rule: BR-CAP-ACC-BKS-013-03
    scenarios:
      - ATS-ACC-BKS-013-02
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
      the criteria of another kind, and any criteria on the rest of the world
  - rule: BR-CAP-ACC-BKS-013-04
    scenarios:
      - ATS-ACC-BKS-013-03
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#refuses
      more than twenty rates, a blank name, a class or a unit named twice, and a
      bad percentage, each by position
  - rule: BR-CAP-ACC-BKS-013-05
    scenarios:
      - ATS-ACC-BKS-013-04
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/e2e/tax-zones.e2e.spec.js#answers
      200 with the version moved on and the rates rewritten whole, the first
      under a new id
  - rule: BR-CAP-ACC-BKS-013-06
    scenarios:
      - ATS-ACC-BKS-013-05
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/unit/rules/tax-zone-rules.spec.js#taxes
      an address with no country as the United States, as Rhythm 1.0 did
  - rule: BR-CAP-ACC-BKS-013-07
    scenarios:
      - ATS-ACC-BKS-013-06
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/tax-classes.integration.spec.js#translates
      the refusal of each restrict foreign key to a tax class into a 409 naming
      it, the invoice lines among them
related_coverage:
  - capability: CAP-ACC-BKS-006
    scenarios:
      - ATS-ACC-BKS-013-09
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
workflow_coverage:
  - workflow: WF-ACC-BKS-006
    interactions: []
    provenance: documented
    source: >-
      specs/accounting/books/design/workflows/WF-ACC-BKS-006-replace-a-tax-zone-and-its-rates.md
    gap: FND-ACC-BKS-074
coverage_interpretation: >-
  Covered means a specified scenario exists. Proposed scenarios and registered
  bindings do not establish a passed run or verified conformance.
invariant_coverage:
  - invariant: INV-DOM-ACC-BKS-002-01
    scenarios:
      - ATS-ACC-BKS-005-01
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/e2e/gl-accounts.e2e.spec.js#answers
      409 to a change of code, naming the column
  - invariant: INV-DOM-ACC-BKS-002-02
    scenarios:
      - ATS-ACC-BKS-002-06
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/e2e/gl-accounts.e2e.spec.js#answers
      400 to a currency the unit is not enabled for, in Rhythm 1.0’s words
  - invariant: INV-DOM-ACC-BKS-002-03
    scenarios:
      - ATS-ACC-BKS-006-02
      - ATS-ACC-BKS-007-01
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/e2e/default-gl-accounts.e2e.spec.js#answers
      400 to another unit’s GL account, naming both units
  - invariant: INV-DOM-ACC-BKS-002-04
    scenarios:
      - ATS-ACC-BKS-005-05
    provenance: documented
    source: >-
      services-accounting:modules/books/db/gl-accounts.table.ts:gl_accounts_default_guard_trigger
  - invariant: INV-DOM-ACC-BKS-002-05
    scenarios:
      - ATS-ACC-BKS-005-04
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/gl-accounts.integration.spec.js#translates
      the refusal of each restrict foreign key to a GL account into a 409 naming
      it
  - invariant: INV-DOM-ACC-BKS-002-06
    scenarios:
      - ATS-ACC-BKS-006-02
      - ATS-ACC-BKS-006-06
    provenance: documented
    source: >-
      services-accounting:modules/books/db/business-unit-default-gl-accounts.table.ts:business_unit_default_gl_accounts_active_trigger
  - invariant: INV-DOM-ACC-BKS-002-07
    scenarios:
      - ATS-ACC-BKS-007-02
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/e2e/bank-accounts.e2e.spec.js#answers
      400 to an account_number_last4 of five digits
  - invariant: INV-DOM-ACC-BKS-002-08
    scenarios:
      - ATS-ACC-BKS-007-04
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/e2e/merchant-accounts.e2e.spec.js#answers
      400 to a processor account reference without a processor
  - invariant: INV-DOM-ACC-BKS-002-09
    scenarios:
      - ATS-ACC-BKS-008-01
      - ATS-ACC-BKS-008-02
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/e2e/departments.e2e.spec.js#answers
      400 to a code the unit already has, under the id it derives
  - invariant: INV-DOM-ACC-BKS-006-01
    scenarios:
      - ATS-ACC-BKS-012-01
      - ATS-ACC-BKS-012-02
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/payment-methods.integration.spec.js#refuses
      to be deactivated, 409 payment_method_system
  - invariant: INV-DOM-ACC-BKS-006-02
    scenarios:
      - ATS-ACC-BKS-012-03
      - ATS-ACC-BKS-012-04
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/payment-methods.integration.spec.js#refuses
      an offline method offered in the portal, naming the rule
  - invariant: INV-DOM-ACC-BKS-006-03
    scenarios:
      - ATS-ACC-BKS-011-03
      - ATS-ACC-BKS-013-06
    provenance: documented
    source: >-
      services-accounting:modules/books/tests/integration/services/persistence/tax-classes.integration.spec.js#translates
      the refusal of each restrict foreign key to a tax class into a 409 naming
      it, the invoice lines among them
  - invariant: INV-DOM-ACC-BKS-006-04
    scenarios:
      - ATS-ACC-BKS-017-01
    provenance: documented
    source: >-
      services-accounting:modules/books/db/settings.table.ts:settings_template_references_trigger
  - invariant: INV-DOM-ACC-BKS-006-05
    scenarios:
      - ATS-ACC-BKS-018-10
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/db/schedules.table.ts;
      services-accounting:modules/maintenance/aws/lambda/CONSUMER.ts:handler;
      services-accounting:package-lock.json
  - invariant: INV-DOM-ACC-BKS-006-06
    scenarios:
      - ATS-ACC-BKS-018-05
      - ATS-ACC-BKS-018-07
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/scheduling/schedules-end-to-end.integration.spec.js#pauses
      the schedule after the fifth failure in a row
  - invariant: INV-DOM-ACC-BKS-006-07
    scenarios:
      - ATS-ACC-BKS-019-04
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/db/declaration-completeness.integration.spec.js#leaves
      no tenant-keyed table undeclared
  - invariant: INV-DOM-ACC-BKS-006-08
    scenarios:
      - ATS-ACC-BKS-019-05
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/integration/services/exports/seed-everything.integration.spec.js#stops
      a batch whose record carries a Stripe secret’s shape, blocked with nothing
      staged
  - invariant: INV-DOM-ACC-BKS-006-09
    scenarios:
      - ATS-ACC-BKS-019-06
    provenance: documented
    source: >-
      services-accounting:modules/maintenance/tests/unit/lifecycle/tenant-availability.spec.js#serves
      only an active tenant that is not disabled, and refuses every other
      combination
permission_coverage:
  - key: accounting.tax-classes.read
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
  - key: accounting.tax-classes.create
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
  - key: accounting.tax-classes.update
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
  - key: accounting.tax-classes.delete
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
  - key: accounting.tax-zones.read
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
  - key: accounting.tax-zones.create
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
  - key: accounting.tax-zones.update
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
  - key: accounting.tax-zones.delete
    where_checked: api
    scenarios:
      - ATS-ACC-BKS-013-07
    provenance: documented
    source: >-
      specs/accounting/books/planning/capabilities/CAP-ACC-BKS-013-book-sales-tax-to-the-right-payable-account-while-tax.md
    execution_gap: FND-ACC-BKS-074
reviewed_at: '2026-10-23'
---

# Maintain tax payable mapping during the Commerce transition: Capability Test Specification

## Coverage

- Resolve payable accounts at posting.
- Validate criteria for each zone kind.
- Bound rate definitions.
- Retain issued tax after zone replacement.
- Select zones in order with a default country.
- Protect tax classes already referenced.

The structured coverage map distinguishes specified examples from remaining findings. Proposed examples require executable proof before qualification.

## Interactions With Related Capabilities

- Default tax mapping supplies an unmapped rate.

Related-capability and workflow references identify the seams each scenario exercises. The lifecycle coverage record retains transitions that still need individual proof.

## Binding Review

The pinned service and browser assertions support the registered bindings. Original test references remain beside each scenario so partial evidence and unresolved conformance remain reviewable.
