---
title: "Business Rules, Warehousing, and Logistics"
category: "operations"
canonical: "https://www.ai-go.app/en-US/docs/guide/advanced-business-rules"
locale: "en-US"
last_updated: "2026-08-10"
source: "AI GO 開發者文件（https://www.ai-go.app）"
---

# Business Rules, Warehousing, and Logistics

Beyond the accounting cascades, the platform ships a set of **business rule engines** — pricing, inventory correction, freight calculation.

Configure them once and they apply automatically at **every entry point**: whether an order comes from a Custom App, the API, or the AI assistant, the same rules apply. Your application never implements discount logic itself.

---

## 1. Pricing rules

Three layers of pricing, from most specific to most general.

### Customer tier discounts

**Configure**: Data Center → CRM → Customer Levels

Set a base discount rate per customer tier (a VIP rate of 0.85 means 15% off). Unit prices are recalculated at order entry using that rate.

### Tag-based negotiated prices

**Configure**: Data Center → CRM → Customer Tags

More specific than a rate — a **fixed price for a specific product** attached to a tag.

For example, under a "long-term contract partner" tag, product A is always 1,000 regardless of list price. At order entry, a customer carrying the tag gets the negotiated price automatically.

Tags support batch binding, so many customers can be tagged at once.

### Volume tier pricing

**Configure**: Data Center → Sales → Products, then the tier pricing tab on a product

Price brackets by quantity:

| Quantity | Unit price |
|---|---|
| 1 – 9 | 500 |
| 10 – 99 | 450 |
| 100+ | 400 |

When an order is created, the quantity selects the bracket automatically, handling wholesale and retail pricing without manual lookup.

---

## 2. Inventory correction

The two places warehouse operations most often diverge from the books both have automatic correction.

### Physical counts

**Configure**: Data Center → Inventory → Physical Counts

1. Creating a count batch pulls the **system quantity** for the specified locations
2. Staff enter the **actual counted quantity**; the system computes the variance
3. Once a supervisor confirms the batch, an **inventory adjustment triggers automatically** — the variance is written to stock, correcting it immediately

No manual arithmetic, no separate adjustment document.

### Packaging conversions

**Configure**: Data Center → Inventory → Packaging Conversions

Handles unit-of-packaging changes — one case split into twelve retail packs, or loose units consolidated into a case.

After a conversion record is created and confirmed by a supervisor, the system deducts the source packaging from stock and increases the target packaging proportionally. Both happen together; there is no intermediate state.

---

## 3. Logistics and freight

### Delivery batches

**Configure**: Data Center → Inventory → Delivery Batches

Consolidate several pending deliveries into one batch so warehouse staff can print picking lists and packing labels in one pass, improving picking and dispatch throughput.

### Freight groups

**Configure**: Data Center → Inventory → Freight Groups

Three billing modes, combinable:

| Mode | Notes |
|---|---|
| Flat rate | Fixed amount per order |
| Free over threshold | Automatically free above a configured order value |
| Tiered brackets | Rate varies by order value bracket |

Example: under 1,000 costs 150; 1,000–3,000 costs 80; above 3,000 ships free.

At order confirmation the qualifying freight is posted to accounts receivable automatically, unifying finance and logistics.

---

## 4. Other pre-built configuration

| Setting | Location | Effect |
|---|---|---|
| Reordering rules | Inventory → Reordering Rules | Triggers replenishment suggestions below the safety level |
| Payment terms | Customer / supplier master | Automatic due date calculation |
| Numbering rules | System & Operations → Core Dictionaries | Automatic document numbering |
| Landed costs | Inventory → Landed Costs | Allocates freight and duty into product cost |
| Period locking | Accounting → Period Locking | Locks closed periods against retroactive edits |

---

## 5. From an application's point of view

The value of these rules is that **your application doesn't have to know they exist**.

```python
def execute(ctx):
    # Only send who, what, and how many
    ctx.db.insert('sale_orders', {
        'customer_id': ctx.params['customer_id'],
        'order_line': [
            {'product_id': ctx.params['product_id'],
             'product_uom_qty': ctx.params['qty']}
        ],
    })
    # Tier discount, negotiated price, volume brackets, freight — all applied by the engines
```

The application submits **business intent**; pricing is computed by the engine. The benefit: when pricing policy changes you edit a setting in the Dashboard, not code scattered across several applications.

---

## 6. Who should maintain these

Most of these settings require write permission on the corresponding module (`crm.write`, `sale.write`, `stock.write`, and so on); some require `system.admin`.

They are best maintained by people who understand the business policy rather than developers — which is precisely the point of keeping rules in configuration instead of code.