Services and Bundles in Odoo¶
⚠️ Terminology revision (2026-09-10) — aligned to ADR 0014 (Service Entitlements) and the Reference Terminology: - Service Contract (instance concept) is superseded by Entitlement (
ov.service_entitlement). - The "Bundle SO" order pattern is superseded by the Composition Rule: an Offer is a singular service product; compositional elements are defined in its Product Profile, not assembled from order lines. - Contract creation flow: purchase confers the Entitlement in Odoo; ABS initializes its Service-Plan instance from the Entitlement (ABS owns delivery states). The tables and flows below retain the historical wording where not yet rewritten.
Purpose: User guide for selling service products alongside physical products, with contracts automatically linked to specific assets.
Audience: Sales operations, commercial teams, order entry staff.
Technical Reference: See odoo-migration repo → docs/assets-serial-numbers/service-bundles-intents.md for implementation details.
Overview¶
Service products in Odoo work like any other product, but represent services (warranties, swap privileges, maintenance plans) rather than physical goods. When an Offer is purchased, an Entitlement (formerly "service contract") is created and linked to the specific asset's serial number.
Two Purchase Contexts (order patterns, not modeling constructs — composition lives in Product Profiles):
- With-asset purchase: Offer purchased together with a physical product (new customer)
- Service-only purchase: additional Offers purchased for an existing asset (post-delivery)
How to Sell Offers¶
Option A: Purchase with Asset (New Purchase)¶
Use when selling a physical product and Offers together. The binding between the Offer and the delivered asset is defined in the Offer's Product Profile (Composition Rule) — not by assembling order lines.
Step 1: Create Sales Order¶
Create a standard Sales Order with: - Customer information - One physical product line (e.g., E3Pro motorcycle) - One or more Offer lines (e.g., E3Pro Warranty, E3Pro Swap Privilege)
Step 2: Confirm and Deliver¶
- Confirm the order
- Process the delivery picking
- Assign the specific serial number during delivery
Step 3: Entitlement Creation¶
After delivery completion, the system automatically: - Creates Entitlements (formerly "service contracts") linked to the delivered serial - Sets start date (delivery date) - Calculates end date based on service duration - ABS initializes its Service-Plan instance from each Entitlement (ABS owns delivery)
Option B: Service-only Purchase (Post-Delivery)¶
Use when a customer wants to add Offers to an asset they already own.
Step 1: Find Original Purchase¶
Search for the customer's original purchase (with-asset order) that sold the physical product.
Step 2: Create Service-only Order¶
- Create new Sales Order
- Select Original Purchase Order field → link to the original with-asset order
- System auto-populates:
- Customer (from original order)
- Target Serial (from the original order's delivery)
Step 3: Add Offer Lines¶
Add only service-product Offers. The system validates (conditions from the Product Profile, per ADR 0015 Eligibility conditions): - Ownership: Must be same customer as original purchase - Compatibility: Offers must be compatible with the asset type - Temporal eligibility: Some Offers have time limits (e.g., "Extended Warranty" only within 30 days of purchase)
Step 4: Confirm¶
On confirmation: - Entitlements created immediately (no delivery needed) - Linked to the target serial from the original order
Managing Entitlements¶
Viewing Entitlements¶
Navigate to: Sales > Entitlements (UI label historically "Service Contracts")
Filters available: - By customer - By serial number - By service type - By status (Active, Expired, Fulfilled)
Contract Lifecycle¶
Draft: Contract created but order not confirmed
Active: Contract in force, services available
Fulfilled: All service obligations completed
Expired: Contract end date reached
Service Product (Offer) vs. Entitlement¶
| Concept | What It Is | Example |
|---|---|---|
| Service Product (Offer) | Catalog definition: a service product + Product Profile (conditions, ABS plan template ref) | "E3Pro Warranty" (can be sold to any E3Pro customer) |
| Entitlement | Durable obligation instance created when an Offer is sold, linked to a specific serial — the contract; the SO is the receipt | "E3Pro Warranty for Serial 12345" (tied to one motorcycle) |
Entitlement Fields¶
When viewing an Entitlement, you'll see:
Entitlement Number: Unique identifier (e.g., SVC-2024-001234)
Customer: Who the entitlement belongs to
Offer: Which Offer (e.g., E3Pro Warranty)
Serial Number: Which specific asset is covered
Start Date: When the entitlement begins
End Date: When the entitlement expires
Status: Current state (Draft/Active/Fulfilled/Expired)
Sales Order: Original order that created this entitlement
Important Rules¶
One Physical Anchor Per Purchase Context¶
When Offers are purchased with a physical product, the order must contain exactly one physical product serial number. All Entitlements from that order link to this serial. (Where multiple anchors apply, the Product Profile defines the binding — Composition Rule.)
Why: Ensures clear entitlement ownership and prevents ambiguity about which asset a service covers.
Service-only Order: Must Reference Original Purchase¶
Service-only orders must link to the original with-asset order via the "Original Purchase Order" field. This: - Enforces ownership (same customer) - Provides temporal anchor for eligibility rules - Creates audit trail
Compatible Services Only¶
The system automatically filters service products based on the physical product type. You can only sell services that are compatible with the product model.
Example: "E3Pro Warranty" only appears as an option when selling an E3Pro motorcycle, not an E5Pro.
Service Purchase Modes¶
Some services can only be sold in specific contexts:
| Mode | Meaning | Example |
|---|---|---|
| Bundle Only | Can only be purchased with new physical product | "E3Pro Warranty (New)" |
| Service-only | Can only be purchased post-delivery | "E3Pro Extended Warranty" |
| Both | Available in either context | "E3Pro Swap Service" |
Temporal Eligibility¶
Some services have time-based constraints:
| Service | Max Days After Purchase | Requires Prior Service |
|---|---|---|
| E3Pro Extended Warranty | 30 days | E3Pro Warranty (New) |
| E3Pro Swap Renewal | No limit | E3Pro Swap Service |
Service Transferability¶
Some services are transferable (follow the asset if sold), others are non-transferable (bound to original buyer):
- Transferable: Warranty (new owner inherits remaining coverage)
- Non-transferable: Swap privilege (tied to original customer account)
Transferability is defined in the service product configuration.
Reporting¶
Outstanding Service Liability¶
View all active Entitlements and their estimated service costs:
Reports > Entitlements > Liability Report (UI label historically "Service Contracts")
Shows: - Total active Entitlements by Offer type - Estimated provision costs - Geographic distribution - Expiration timeline
Entitlement Traceability¶
From any serial number, view: - All Entitlements (past and present) - Service history - Claims/fulfillment records
Inventory > Serial Numbers > [Select Serial] > Entitlements Tab (UI label historically "Service Contracts")