---
id: TST-ACC-TRX-054
title: Issue tax ship to suite
kind: integration
product_area: accounting
module: transactions
revision: 1
status: draft
source_sha:
  services-accounting: f47cb263875bbc0c5640fba7dae6785ec32695f8
repository: services-accounting
files:
  - >-
    modules/transactions/tests/integration/services/invoices/issue-tax-ship-to.integration.spec.js
implements:
  - ATS-ACC-TRX-001-13
implements_parts:
  - scenario: ATS-ACC-TRX-001-13
    assertion: >-
      it taxes the shipped line at the ship-to address: the Westchester zone’s
      County tax
    provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/invoices/issue-tax-ship-to.integration.spec.js#it
      taxes the shipped line at the ship-to address: the Westchester zone’s
      County tax
environment: local
implementation_state: implemented
latest_result: not-run
latest_run_at: null
latest_run_ref: null
conformance: not-verified
estimated_minutes: 3
isolation: >-
  Suite-marked records in the prepared local test database; fixture teardown
  removes owned records.
provenance: test
source: >-
  services-accounting:modules/transactions/tests/integration/services/invoices/issue-tax-ship-to.integration.spec.js
evidence:
  - provenance: test
    source: >-
      services-accounting:modules/transactions/tests/integration/services/invoices/issue-tax-ship-to.integration.spec.js
    assertion_titles:
      - shipped invoice lines taxed at the ship-to address (integration)
      - >-
        an invoice billed to the New York Society with a Mount Vernon ship-to: a
        shipped dues line 60.00 and an unshipped one 40.00
      - answers the ship-to address and each line’s ships flag on the draft
      - >-
        taxes the shipped line at the ship-to address: the Westchester zone’s
        County tax
      - >-
        taxes the unshipped line at the billing address: the New York zone’s
        State and City tax
      - >-
        sums the header’s tax and total from the lines, and answers the ship-to
        and the flags on the issued invoice
      - >-
        refuses the application role changing the ship-to address or a line’s
        ships flag once the invoice is issued
      - the draft’s replace command
      - >-
        takes the ship-to address and the flags as a whole, clearing a ship-to
        the replacement leaves out
      - the fallbacks when one address is missing
      - >-
        taxes a shipped line at the billing address when the invoice has no
        ship-to
      - >-
        taxes an unshipped line at the ship-to address when the bill-to has none
        (Ada keeps no address)
      - >-
        refuses a shipped line when the invoice has neither address (D-T4): the
        invoice is not issued
      - an amendment
      - >-
        re-taxes the line whose ships flag changed at the ship-to: the New York
        tax lines are replaced by the County’s
      - >-
        keeps the untouched line’s tax, taxes the line it adds at the ship-to,
        and re-derives the totals at the next revision
      - >-
        sets the ship-to address, which the lines the amendment next reprices
        are taxed at
      - clears the ship-to address with null
      - the memos
      - >-
        taxes a debit memo’s added lines by their ships flag at the invoice’s
        addresses
      - >-
        inherits the zones of the invoice’s lines in a credit memo: the shipped
        line’s credit reverses County tax
      - a bill-to with an address of its own
      - >-
        taxes a Westchester Club invoice’s shipped line at a New York ship-to,
        and the unshipped one at the club’s Westchester address
    imports:
      - 'const { sql } = require(''drizzle-orm'');'
      - 'const { stage } = require(''@rhythmsoftware/macroservice-testing/stage'');'
      - >-
        const { createCreditMemo, createDebitMemo } =
        require('../../../../services/change-memos/memo-commands');
      - >-
        const { createDraft, updateDraft } =
        require('../../../../services/invoices/invoice-drafts');
      - >-
        const { amendInvoice } =
        require('../../../../services/invoices/invoice-amendments');
      - >-
        const { issueInvoice } =
        require('../../../../services/invoices/invoice-issue');
      - >-
        const { getInvoice } =
        require('../../../../services/invoices/invoice-reads');
      - '} = require(''../../invoices-fixtures'');'
      - >-
        const { MOUNT_VERNON_ADDRESS, NEW_YORK_ADDRESS, NEW_YORK_SOCIETY,
        WESTCHESTER_CLUB, createTaxWorld } = require('../../tax-fixtures');
      - "\t\t\tworld.require();"
      - "\t\t\tconst { drafted } = issued.require();"
      - "\t\t\tconst { issued: invoice } = issued.require();"
      - "\t\t\tconst { issued: invoice } = issued.require();"
      - "\t\t\tconst { issued: invoice } = issued.require();"
      - "\t\t\tconst { issued: invoice } = issued.require();"
      - "\t\t\tworld.require();"
      - "\t\t\tworld.require();"
      - "\t\t\t\tworld.require();"
      - "\t\t\tconst { invoice, answer } = amended.require();"
      - "\t\t\tconst { answer } = amended.require();"
      - "\t\t\tconst { answer } = amended.require();"
      - "\t\t\tconst { answer } = amended.require();"
      - "\t\t\tworld.require();"
      - "\t\t\tconst invoice = issued.require();"
      - "\t\t\tconst invoice = issued.require();"
      - "\t\t\tworld.require();"
    test_double_declarations:
      - ' * Real: the commands through their one transaction, the tax, configuration and product persistence, the CRM stand-in, the'
---

# Issue tax ship to suite

## Verification Boundary

The suite exercises transaction commands and database protections in the local prepared test environment. Registration records the existing executable file; it does not report a run or establish product approval.

## What This Suite Proves

Its cited assertions contribute evidence for issue freezes applicable tax treatment. The structured assertion bindings identify which parts of combined scenarios it executes.

## What It Does Not Prove

Local commands and route invocations do not establish deployed routing, live processor guarantees or the complete staff browser experience. An unbound feature chain remains proposed, and this registration carries no execution result.

## Real Dependencies and Test Doubles

The suite uses the imported commands, route handlers or persistence code against the local test database. Fixture helpers supply accounting context; any stepped clock, dummy processor or substituted external client is retained in the evidence declarations.

## Must Not Be Doubled

The command or persistence behavior under assertion and its relevant database protections must remain real. Substituting the final financial result removes evidence of transactional effects.
