# SalesItem

## Description

SalesItem is the sales module's own record for an item that may be sold. It holds the attributes that only sales decides, apart from the shared item ledger in item-management.

The existence of the row *is* the decision. An item without a SalesItem cannot appear on a sales order line at all; adopting an item for selling means creating its SalesItem, and withdrawing it means deleting that row.

Today SalesItem carries one selling default: `requiresPhysicalFulfillment`, which says whether selling this item is expected to produce an outbound shipment. That fact belongs to the item, not to the salesperson typing a line — a support subscription never ships and a pallet of shirts always does, regardless of who sold it. Sales order lines resolve the value from here at entry time and freeze it onto the line, so a later change to the master never rewrites what an open order agreed to.

## Domain Model Definitions

### Model type

Standard

### Command Definitions

- [createSalesItem](../command/CreateSalesItem.md) - Adopt an item for selling and set its selling defaults
- [updateSalesItem](../command/UpdateSalesItem.md) - Change the selling defaults of an already adopted item
- [deleteSalesItem](../command/DeleteSalesItem.md) - Withdraw an item from selling

### Query Definitions

None — order commands read the record through the repository; no consumer needs a standalone read yet.

### Models

- SalesItem

### Invariants

- Every SalesItem references exactly one item; `itemId` is required and unique, so an item has at most one selling record
- An item may only be sold while it holds a SalesItem; sales order lines are rejected for items without one
- `requiresPhysicalFulfillment` always has a value — the selling record never leaves the shipment expectation undecided
- Changing or deleting a SalesItem never changes sales order lines that already froze its values

### Relationships

- **Belongs To Item**: Each selling record extends exactly one [Item](../../../item-management/docs/model/Item.md) (1:1)
- **Referenced By SalesOrder**: [SalesOrder](./SalesOrder.md) lines resolve `requiresPhysicalFulfillment` from the selling record of their item and snapshot it onto the line
