# Product

One good or service the business sells, makes, buys or stocks, described once.

A Product is a thing or a piece of work the business sells, described once: a good, a menu item, an equipment model, a spare part, a digital license, a service program or a consulting hour. Product Type* says which. A service is a Product with no stock; stock, purchase cost and recipes are facts of Inventory, not columns here. Who sells it and at what price is an [Offer](/systems/products/entity-offer). BDS type: schema:Product.

## Fields

### Identity

| Field | Storage | Meaning |
| --- | --- | --- |
| Name* | Text | Trade name, without size or packaging |
| Product # | Auto-number | Local sequence; match by Name* and SKU°, not by number |
| Description° | Long text | What the product is, for someone who never saw it |
| SKU° | Text | Our own stock code; the vendor's code belongs to the vendor quote |
| GTIN° | Text | Barcode digits printed on the product |
| Image° | Attachments | Photos; the first one is the one shown |
| URL° | URL | Manufacturer or vendor page |
| Documents° | Attachments | Manuals and spec sheets |

### Classification

| Field | Storage | Meaning |
| --- | --- | --- |
| Product Type* | Single choice | Good, Menu Item, Ingredient, Equipment Model, Part, Retainer, Subscription, Project, Hourly, Digital |
| Kind | Formula | Service, Digital or Good, derived from Product Type* |
| Category° | Linked records | [Product Category](/systems/products/entity-product-category); one category |
| Brand° | Linked records | [Brand](/systems/products/entity-brand); one brand, blank for unbranded goods |
| Intake Step | Formula | Routes Draft or blank-status rows to their next creation step; blank for Active and Archived |
| Product Check | Formula | Name* and Product Type* are filled |
| Tags° | Linked records | [Tags (mirror)](/systems/products/entity-tags); optional |

### Who makes it and whose catalog it is in

| Field | Storage | Meaning |
| --- | --- | --- |
| Provider° | Linked records | [Organization (mirror)](/systems/products/entity-organization); the company that makes the good or delivers the service |
| Owner° | Linked records | [Organization (mirror)](/systems/products/entity-organization); the one group company whose catalog holds it; blank means shared |

### Composition, offers and substitutes

| Field | Storage | Meaning |
| --- | --- | --- |
| Components | Linked records | Lines in [Product Component](/systems/products/entity-product-component) where this product is the whole |
| Component Of | Linked records | Lines where this product is the part |
| Offers | Linked records | [Offers](/systems/products/entity-offer) that sell this product |
| Alternative To° | Linked records | On a substitute, the main product it can replace |
| Alternatives | Linked records | Inverse: products that can replace this one |

### State and audit

| Field | Storage | Meaning |
| --- | --- | --- |
| Lifecycle Status* | Single choice | Draft, Active, Archived |
| Created At | Created time | When the row was created |

Reference grid captured on 2026-10-28, before the intake views and label updates. Use the current view names in this guide.

[![Product grid: one row per good or service; Kind follows Product Type*.](/systems/products/screens/products-product-grid.png)](/systems/products/screens/products-product-grid.png)

## Calculated rules

### Kind

```text
IF(OR({Product Type*} = "Retainer", {Product Type*} = "Subscription", {Product Type*} = "Hourly", {Product Type*} = "Project"), "Service",
IF({Product Type*} = "Digital", "Digital",
IF(LEN({Product Type*} & "") = 0, "", "Good")))
```

A Service row is also a schema:Service. Kind is blank while Product Type* is blank.

## Links and cardinality

One product can have many offers, many component lines as the whole and many as the part. The field descriptions ask for exactly one Category°, Brand°, Provider° and Owner°, but every link field accepts several records; no formula checks that. The Provider is not the seller: a group company can sell a program another company delivers.

## Intake routing

The creation intake uses these local formulas. Active and Archived records leave the routed steps; lifecycle changes remain manual.

### Product Check

```text
IF(LEN(TRIM({Name*} & "")) = 0, "⚠ No product name. ", "") & IF(LEN({Product Type*} & "") = 0, "⚠ No product type. ", "")
```

### Intake Step

```text
IF(OR({Lifecycle Status*} = "Draft", {Lifecycle Status*} = BLANK()), IF(LEN(TRIM({Name*} & "")) = 0, "Create - 1", IF(LEN({Product Type*} & "") = 0, "Create - 2", "Create - 3")), "")
```

## Lifecycle

[Create this record through the intake](/systems/products/intakes-and-checks).

Start every new row as Draft. Set Active when it is in the catalog today. Set Archived to retire it; never delete a row that something points at. Archiving a product does not archive its offers or component lines; do that on each row.

## Example

A fictitious program: Name* = Example Program, Product Type* = Retainer, Kind = Service, Category° = Reputation Management, Provider° = the group company that delivers it, Lifecycle Status* = Active. Components lists eight lines; Offers lists one offer at 2600 per month.

## Next steps

[Add a product and its offer](/systems/products/add-product) · [Compose a product](/systems/products/compose-product) · [All entities](/systems/products/entities)