BSS/OSS Academy
4.212 min read

Product Inventory & Subscription Lifecycle

Product Inventory: The BSS Runtime View

Product Inventory is the BSS-side source of truth for what each customer currently has. It holds every product instance — every subscription, every add-on, every bundle — with its commercial characteristics, lifecycle state, and billing associations. If the Product Catalog says "here is what we sell," Product Inventory says "here is what customer X actually bought."

This is the inventory layer that customer-facing teams interact with most. When a call-centre agent looks up a customer, they are reading Product Inventory. When the self-service portal shows "Your Services," it is querying Product Inventory. When billing calculates monthly charges, it reads Product Inventory.

Product Inventory
A runtime repository of all product instances (subscriptions) associated with customers. Each product instance references a Product Specification from the catalog, holds customer-specific characteristic values, tracks lifecycle state, and links to the billing account responsible for payment. Managed via TMF637 Product Inventory Management API.

Product Instance vs Product Specification

A Product Specification in the catalog is a template: it defines the structure, allowed characteristics, and constraints of a product type. A Product Instance in inventory is a concrete occurrence of that template, created for a specific customer with specific values.

Specification vs Instance

AspectProduct Specification (Catalog)Product Instance (Inventory)
NatureTemplate / blueprintConcrete occurrence
QuantityOne per product typeOne per customer subscription
CharacteristicsDefines allowed values (e.g., speed: 50/100/200 Mbps)Holds actual value (e.g., speed: 200 Mbps)
LifecycleDraft → Published → RetiredCreated → Active → Suspended → Terminated
Customer linkNone — it is a templateLinked to a specific Customer and Billing Account
PriceDefines pricing rules and optionsRecords the actual price applied (after promotions)
TMF APITMF620 Product Catalog ManagementTMF637 Product Inventory Management
Specification to Instance Example
Product Specification: "Home Broadband" — characteristics: speed (50/100/200/500 Mbps), router included (yes/no), contract term (12/24 months). Product Instance #PI-88421: Customer: Jane Smith, Account: ACC-9912, speed: 200 Mbps, router included: yes, contract term: 24 months, start date: 2024-06-01, state: Active, monthly price: $59.99 (after 20% loyalty discount).

Anatomy of a Product Instance

A product instance in inventory is a rich data structure. Understanding its components is essential for anyone working with BSS integration, billing, or CRM.

Product Instance Data Elements

ElementDescriptionExample
Instance IDUnique identifier for this product instancePI-88421
Product Spec ReferenceLink to the catalog specificationPS-HOME-BB-v2.1
Customer ReferenceThe customer who owns this productCUST-42817
Billing AccountAccount responsible for paymentBA-ACC-9912
Lifecycle StateCurrent state in the product lifecycleActive
CharacteristicsCustomer-specific attribute valuesspeed=200Mbps, routerIncluded=true
Start Date / End DateActivation and contract termination dates2024-06-01 / 2026-06-01
Applied PricesActual pricing after discounts/promotions$59.99/month (list: $74.99)
Related InstancesLinks to child/parent product instancesParent: BUNDLE-PI-8800
Service ReferencesLinks to CFS instances in Service InventorySI-CFS-INT-ACCESS-88421

Subscription Lifecycle Management (SLM)

Subscription Lifecycle Management (SLM) is the discipline of managing product instances from creation through to termination. SLM encompasses all the state transitions a subscription goes through, the business rules that govern those transitions, and the events that trigger downstream processes.

CreatedOrder placed, pending activationCancelledOrder cancelledActiveService live, billing activeSuspendedTemporarily disabledPending DisconnectGrace periodTerminatedPermanently endedactivation confirmedorder cancelledsuspendresumedisconnect requestreversalmax suspension exceededgrace period expiredLegendForward / ResumeSuspend / DisconnectTerminal

Product instance lifecycle states and valid transitions — each state drives billing and service behaviour

Figure 4.2 — Product instance lifecycle states and transitions

Product Instance Lifecycle States

Every product instance moves through a defined set of lifecycle states. While exact state names vary by vendor, the core states are consistent across the industry.

The product instance has been created in inventory but is not yet active. This happens when an order has been placed but fulfilment is still in progress. The customer does not yet have the service, and billing has not started.

  • Triggered by: Commercial order acceptance
  • Billing impact: No charges yet
  • Service impact: Service instances may be in "Designed" or "Reserved" state
  • Typical duration: Hours to days (depends on fulfilment complexity)
Pending Disconnect State
Many operators add a "Pending Disconnect" state between Active and Terminated. This allows a grace period (e.g., 30 days) during which the customer can reverse their disconnection. Resources remain allocated during this period, and billing may or may not continue depending on operator policy.

State Transitions and Business Rules

Not all state transitions are allowed. Business rules govern which transitions are valid and what conditions must be met. For example, you cannot move directly from "Created" to "Terminated" without passing through "Active" first (in most implementations).

Valid State Transitions

From StateTo StateTriggerConditions
CreatedActiveActivation confirmationAll service/resource instances successfully activated
CreatedCancelledOrder cancellationWithin cancellation window, no resources allocated
ActiveSuspendedSuspension requestValid reason (non-payment, customer request, fraud)
ActivePending DisconnectDisconnection requestContract terms checked, early termination fees calculated
SuspendedActiveResumption requestSuspension reason resolved (payment received, etc.)
SuspendedTerminatedTermination after suspension periodMax suspension duration exceeded
Pending DisconnectActiveDisconnect reversalWithin grace period, customer requests retention
Pending DisconnectTerminatedGrace period expiredFinal billing complete, resources released

Cascading State Changes Across Layers

When a product instance changes state, this must cascade down through the service and resource layers. A suspended product means suspended services and (optionally) suspended resource configurations. A terminated product means terminated services and deallocated resources. This cascade is a core responsibility of the order management / fulfilment chain.

Example: Suspension Cascade

1
Product Suspended
Product Inventory (BSS)

Product Inventory updates product instance state to "Suspended" due to non-payment. A suspension event is published.

2
Service Suspension Initiated
SOM (OSS)

SOM receives the suspension event and creates a modify service order to suspend all linked CFS instances.

3
CFS/RFS Suspended
Service Inventory (OSS)

Service Inventory updates CFS and RFS instances to "Suspended" state. Service-level configurations may be modified (e.g., redirect to payment portal).

4
Resource Reconfigured
Resource Inventory / Activation

Activation engine applies suspension configuration to resources (e.g., apply walled-garden policy, restrict bandwidth). Resources remain allocated but service is restricted.

Product Instance Relationships

Product instances in inventory have relationships, mirroring the catalog's product structure. A bundle product instance contains child product instances. A primary product instance may have dependent add-on instances. Understanding these relationships is critical for lifecycle management — you cannot terminate a parent bundle without terminating its children.

  • Bundle → Component: A "Triple Play" bundle instance contains Broadband, Voice, and IPTV component instances
  • Primary → Add-on: A "Broadband" primary instance has "Static IP" and "Speed Boost" add-on instances
  • Dependency: A "Mobile Handset" product instance depends on a "Mobile Plan" product instance
  • Cross-product: A "Multi-Play Discount" instance references both Fixed and Mobile product instances
Relationship Integrity During Lifecycle Changes
When modifying or terminating product instances, relationship integrity must be enforced. Terminating a parent bundle should cascade to children. Terminating a primary product should terminate dependent add-ons. Failing to enforce these rules leads to orphaned product instances — subscriptions that exist in inventory but have no valid commercial context.

TMF637 Product Inventory Management API

TMF637 Product Inventory Management
TMF637 provides a standardized API for managing product instances in inventory. It supports CRUD operations on product instances, filtering by customer/account/state, and event notifications for state changes. The API uses the Product resource model aligned with SID, supporting characteristics, relationships, prices, and lifecycle state.

TMF637 is one of the most widely implemented TMF Open APIs because Product Inventory is consumed by so many systems: billing, CRM, self-service portals, analytics, and assurance.

TMF637 Key Operations

OperationMethodPurposeExample
List ProductsGET /productRetrieve product instances with filteringGET /product?relatedParty.id=CUST-42817&state=active
Get ProductGET /product/{id}Retrieve a specific product instanceGET /product/PI-88421
Create ProductPOST /productCreate a new product instance (typically by fulfilment)POST with product spec ref, customer, characteristics
Update ProductPATCH /product/{id}Modify characteristics or statePATCH /product/PI-88421 with new speed value
Delete ProductDELETE /product/{id}Remove a product instance (rare — usually state change to Terminated)Typically not used; state change preferred
Event Notifications in TMF637
TMF637 supports event-based notifications via a Hub/Listener pattern. Consumers can subscribe to events like ProductCreateEvent, ProductStateChangeEvent, ProductAttributeValueChangeEvent, and ProductDeleteEvent. This enables real-time synchronization between Product Inventory and downstream systems like billing.

Product Inventory in Practice

Think of Product Inventory as a customer's account statement. It lists everything they have subscribed to, the current status of each subscription, and what they are paying. When you log into your broadband provider's website and see "Your Services," that is Product Inventory.

Product Inventory typically integrates with:

  • CRM: Displays product instances on the customer profile — read access
  • Billing: Reads product instances to generate charges — read access with event subscription
  • Self-Service Portal: Shows customers their subscriptions — read access via BFF
  • Order Management (COM): Creates and modifies product instances during fulfilment — write access
  • SOM: Receives product instance references to correlate with service instances — reference access
  • Analytics: Reads product inventory for subscriber base analysis — bulk read access

In large-scale deployments, Product Inventory must handle millions of product instances with sub-second query times. Common architectural patterns include: (1) CQRS — separate command and query models, optimizing writes for fulfilment and reads for CRM/portal; (2) Event sourcing — storing every state change as an event, enabling audit trails and temporal queries; (3) Sharding — partitioning by customer ID or region for horizontal scalability; (4) Read replicas — dedicated read copies for high-traffic consumers like self-service portals.

Product Inventory must also support effective dating — the ability to record future state changes (e.g., a plan upgrade scheduled for the next billing cycle) and historical state queries (e.g., "what was this customer's plan on January 15th?"). This temporal dimension adds significant complexity to the data model.

Modify and Disconnect Flows

Product Inventory is not only populated during initial order fulfilment. It is continuously updated throughout the subscription lifecycle as customers change plans, add services, or disconnect.

A modify order changes the characteristics or composition of an existing product instance. For example, upgrading from 100Mbps to 200Mbps, or adding a Static IP add-on.

Modify Flow Impact on Product Inventory

1
Modify Order Placed
COM (BSS)

Customer requests upgrade from 100Mbps to 200Mbps. COM creates a modify order.

2
Product Instance Updated
Product Inventory (BSS)

Product Inventory updates the speed characteristic from 100 to 200 and adjusts the applied price. State may temporarily be "Pending Modify".

3
Service Modification Triggered
Service Inventory (OSS)

The change cascades to Service Inventory — CFS instance speed attribute is updated, and RFS modifications are orchestrated.

4
Confirmation and Billing Update
Product Inventory / Billing (BSS)

Once activation confirms the change, Product Inventory state returns to Active with updated characteristics. Billing picks up the new price.

Product Inventory Source of Record

Product Inventory SoR Mapping

EntitySystem of RecordSystem of EngagementSystem of ReferenceNotes
Product Instance (subscription)Product Inventory / CRMSelf-Service Portal, Agent DesktopBilling, Analytics, Service InventoryThe authoritative record of what the customer has bought.
Product Instance StateProduct InventoryCOM (triggers state changes via orders)Billing (charge start/stop), CRM (display)State drives billing and service availability.
Applied PricesProduct Inventory / Rating EngineCOM (applies during order), Promotion EngineBilling (invoice generation)Price after all discounts and promotions.
Contract TermsProduct Inventory / Contract ManagementSales channels (during sale)Billing (ETF calculation), Retention teamMinimum term, renewal date, penalties.
Intermediate

Product Inventory as the Commercial Truth

Product Inventory is the single commercial truth. When any system needs to answer "what does this customer have and what are they paying?", Product Inventory is the answer.

This is why Product Inventory must never be bypassed. If a service is activated without a corresponding product instance, revenue leakage occurs. If a product instance is created without successful activation, the customer is billed for something they do not have. The fulfilment chain must ensure atomicity across the product-service-resource inventory layers.

Section 4.2 Key Takeaways

  • Product Inventory holds the runtime, customer-specific view of subscriptions — not the catalog template
  • Each product instance references a Product Specification and holds customer-specific characteristic values
  • Lifecycle states (Created, Active, Suspended, Terminated) drive billing and service availability
  • State changes cascade across inventory layers: product change triggers service and resource changes
  • TMF637 provides standardized CRUD and event notification for product instances
  • Product instance relationships (bundle, add-on, dependency) must be integrity-checked during lifecycle changes
  • Product Inventory is the Source of Record for the commercial subscription — billing, CRM, and portals all reference it