Service Bundles: Physical Goods + Asset-Bound Services¶
Purpose: Define how to represent bundles combining physical goods with service contracts that bind to specific assets in Odoo, while maintaining integration with the ABS (Asset-Based Services) platform.
Audience: Developers, system architects, operations teams implementing asset-service binding.
1. Product Domain Separation¶
The architecture maintains strict semantic and accounting separation between two product domains:
Physical Goods¶
- Tangible products (electric motorcycles, home energy systems)
- Managed under the Goods branch of the product category tree
- Participate in standard Odoo workflows:
- Inventory moves
- BoM management
- Cost of Goods Sold (COGS) roll-up
- Pricing rules
- Sales → Invoice → Payment lifecycle
- Tracked at individual item level (VIN, Product Item ID, serial/lot)
Service Products¶
- Intangible, long-lived offerings (subscriptions, warranties, privileges, entitlements)
- Managed under the Services branch of the product category tree
- Characterized by:
- Duration or lifecycle
- Ongoing contractual meaning rather than inventory movement
- Examples: warranties, swap privileges, service subscriptions
2. Bundle Requirements¶
Bundles serve commercial requirements beyond simple product grouping:
- Combine at least one physical good with one or more service products
- The combination carries business meaning, not merely pricing convenience
- Example: Motorcycle sale with warranty + swap privilege + service entitlement
3. Core Challenge: Service-to-Asset Binding¶
The critical requirement is what happens after the sale:
Physical Goods Resolution¶
- Physical goods naturally resolve to specific assets:
- Motorcycle with VIN
- System with ProductItemID / serial number
Service Products Challenge¶
- Service products are generic by default
- Lack intrinsic awareness of which physical item they apply to
Required Binding¶
When a "goods + services" bundle is sold:
- The service contract must bind to the specific physical item sold
- Binding is to the serial number, not just to the customer
- This binding must be:
- Deterministic
- Traceable
- Compatible with Odoo's native data model
4. System Responsibilities¶
Odoo Responsibilities¶
- Commercial intent
- Product definition
- Pricing
- Selling
- Invoicing
ABS (Asset-Based Services) Responsibilities¶
- Asset-level service execution
- Enforcement
- Runtime service state
- IoT-based asset tracking
- ServicePlan management linking:
- Customer
- Specific asset
- Service logic (LEV services, battery swap, enforcement rules)
The systems connect via clear artifacts and messages, without collapsing responsibilities.
5. Architectural Constraints¶
The following constraints guide implementation:
- Avoid creating new Odoo models
- Avoid extending existing core models
- Use intrinsic/native Odoo constructs
- Do not interfere with or destabilize existing Odoo operations
- Preserve standard Odoo workflows and accounting logic
- Treat Odoo as the System of Record for sales
- Allow ABS to remain the System of Execution for services
6. Design Objective¶
Represent "Physical Goods + Asset-Bound Services" bundles in Odoo such that:
- They can be sold cleanly using native constructs
- They preserve all native Odoo behaviors
- They generate structured information at sale/confirmation time
- ABS can deterministically bind service entitlements to specific physical assets
- Long-term architectural boundaries are respected
- Odoo's core data model remains unmodified
- Existing operations remain undisrupted
Related Documentation¶
- Odoo Sales Order as Contract - Line-level contract semantics
- Odoo Lot/Serial Numbers - Physical asset identity
- ABS ServicePlan Integration - Odoo-ABS contract
- Non-Fungibility Concepts - Serial as non-fungible anchor