Skip to content

Your interpretation is 100% correct, and you’ve articulated the cleanest architecture for OVES so far.

Let me restate it in a precise, structured way that you can reuse with the team:


Core Principle

Product Unit is the shared atomic concept between ABS and Odoo. Bundle is an ABS-only construct, not an Odoo construct.

Odoo never needs to know “what a bundle is.” Odoo only needs to receive and process Product Units, each with its own commercial meaning.


🎯 1. ABS Creates and Owns Bundles

ABS is the business logic engine that:

  • defines allowed combinations of Product Units
  • enforces entitlement logic
  • prevents invalid combinations (removes bundle explosion)
  • applies market/tier/channel rules
  • maps bundle selections to Odoo-ready Product Units
  • drives the sales frontend with meaningful offerings

This keeps the bundling system:

  • dynamic
  • rule-based
  • channel-aware
  • market-aware
  • entitlement-aware

And not polluted by Odoo limitations.


🎯 2. Odoo Should NOT Mirror Bundles

Odoo bundles (BoMs, kits, variants) should NOT be used for:

  • commercial bundles
  • entitlement bundles
  • swap subscription bundles
  • deposit + subscription + entitlement packages
  • multi-tier subscription logic

Because Odoo’s bundle mechanisms:

  • are static
  • are physical/inventory-oriented
  • cannot express long-term entitlement logic
  • explode into many SKUs if used naively
  • confuse accounting and audit if services/deposits are hidden inside

So yes: Do not recreate ABS bundles in Odoo.


🎯 3. How Bundles Appear in Odoo → as sale.order lines

When a customer selects a bundle in the frontend (OVApp):

➜ ABS expands the bundle → list of Product Units

➜ OVApp submits those unit products → sale.order in Odoo

Example:

Bundle selected in ABS: “45Ah Premium Swap Start Pack”

ABS internally maps to Product Units:

  • PU: Swap Deposit (45Ah)
  • PU: Swap Entitlement (45Ah)
  • PU: Weekly Swap Subscription
  • PU: Helmet
  • PU: Installation Service

Odoo sees only:

Line 1: Swap Deposit (45Ah)
Line 2: Swap Entitlement (45Ah)
Line 3: Weekly Swap Subscription
Line 4: Helmet
Line 5: Installation Service

This is exactly how commercial systems are supposed to behave.

Odoo does the commercial job:

  • pricing
  • invoicing
  • subscription creation
  • deposit accounting
  • customer communication
  • CRM
  • reporting

ABS does the operational logic:

  • entitlement
  • swap rules
  • asset management
  • access control

🎯 4. This enforces the design principle clearly

Odoo handles all customer-facing commercial logic.

  • Sales orders
  • Pricing
  • Deposits
  • Refundability
  • Recurring billing
  • Warranty
  • Customer portal visibility

ABS handles all smart asset logic.

  • Swap usage
  • Asset identity
  • Eligibility
  • Tier logic
  • Validation
  • Telemetry

Bundles belong to ABS because bundling is actually business-logic composition, not “product composition.”


🎯 5. Why this architecture is strategically correct

✔ No SKU explosion

Every combination becomes dynamic, not static.

✔ Clear commercial audit trail

Odoo sale.order lines represent each Product Unit transparently.

✔ Pricing remains channel-specific

Different channels can have different pricelists for the same PU.

✔ Entitlement remains ABS-driven

Because entitlement logic is not an Odoo feature.

✔ Bundles are market-flexible

ABS can change bundles without migrations in Odoo.

✔ Scalable internationally

Odoo stays clean and simple across all countries.

✔ Continuous deployment

ABS can add new bundle types without reconfiguring Odoo.


🎯 6. The final model in one sentence

ABS decides what bundle a customer can buy. Odoo decides how each product unit is commercially executed.

That’s it.