# Offer

One sellable proposition: one product, at one price, in one unit, by one seller, for a period.

An Offer is one sellable proposition: exactly one Product, good or service, at one price, in one unit, sold by one group company, valid for a period, optionally inside a Price List. "The 1800 package" is an offer of a service at 1800 per month. A Deal in the CRM proposes an offer; the negotiated amount stays on the deal, the list price stays here. BDS type: schema:Offer.

## Fields

### What is sold and by whom

| Field | Storage | Meaning |
| --- | --- | --- |
| Name* | Text | Typed as item - price/unit |
| Offer # | Auto-number | Local sequence; match by Name* |
| Product* | Linked records | [Product](/systems/products/entity-product); exactly one |
| Item (Name) | Formula | Name of the linked product |
| Seller* | Linked records | [Organization (mirror)](/systems/products/entity-organization); the group company on the proposal |

### Price

| Field | Storage | Meaning |
| --- | --- | --- |
| Price* | Currency | List price per one unit; the field is formatted with $ for every currency |
| Price Currency* | Single choice | USD, BRL |
| Unit* | Single choice | per month, per hour, per item, per project |
| Minimum Quantity° | Number | Smallest quantity the offer applies to; blank means no minimum |

### Validity and grouping

| Field | Storage | Meaning |
| --- | --- | --- |
| Valid From° | Date | First day it can be proposed |
| Valid Through° | Date | Last day; blank means still current |
| Price List° | Linked records | [Price List](/systems/products/entity-price-list); one list or none |
| Lifecycle Status* | Single choice | Draft, Active, Archived |
| Offer Check | Formula | ⚠ fragments that keep the offer from being proposed |

### Audit and classification

| Field | Storage | Meaning |
| --- | --- | --- |
| Created At | Created time | When the row was created |
| Created by | Created by | Who created it |
| Intake Step | Formula | Routes Draft or blank-status rows to their next creation step; blank for Active and Archived |
| Tags° | Linked records | [Tags (mirror)](/systems/products/entity-tags); optional |

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

[![Offer grid: each row sells one product at one price, unit and seller.](/systems/products/screens/products-offer-grid.png)](/systems/products/screens/products-offer-grid.png)

## Calculated rules

### Offer Check

```text
IF(LEN({Product*} & "") = 0, "⚠ No product. ", "") &
IF({Price*} = BLANK(), "⚠ No price. ", "") &
IF(LEN({Price Currency*} & "") = 0, "⚠ No currency. ", "") &
IF(LEN({Unit*} & "") = 0, "⚠ No unit. ", "") &
IF(LEN({Seller*} & "") = 0, "⚠ No seller. ", "") &
IF(AND({Valid From°} != BLANK(), {Valid Through°} != BLANK(), IS_AFTER({Valid From°}, {Valid Through°})), "⚠ Valid From is after Valid Through. ", "")
```

### Item (Name)

```text
{Product*} & ""
```

## Links and cardinality

Many offers can sell one product, and the same product sold by two companies is two offers. Product*, Seller* and Price List° accept several records; Offer Check flags only blanks, not a second product or seller, and does not compare the offer currency with the list. An offer whose Valid Through° has passed is not flagged.

## Readers

The CRM mirrors every Offer column except Tags as Offer (mirror). Deal.Product* links one offer; the CRM shows Offer (Price), Offer (Item) and Offer (Unit) beside the negotiated Value*. Local CRM use is documented in [Offer in CRM](/systems/crm/entity-offer). The inverse Deals (Proposed) exists only in the CRM mirror; this base cannot see which deals use an offer.

## Intake routing

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

### Intake Step

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

## Lifecycle

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

Start as Draft; set Active when Offer Check is blank and sellers may propose it; set Archived to retire it. Never delete an offer a deal may point at. A new price is a new offer with new dates; see [Change a price](/systems/products/change-price).

## Example

Name* = Example Program - 2600/month; Product* = Example Program; Price* = 2600; Price Currency* = USD; Unit* = per month; Seller* = the group company; Price List° = Direct - 2026; Lifecycle Status* = Active; Offer Check blank.

## Next steps

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