Parent Service Selection Decision Tree
Purpose: Determine the correct parent service for a child service.
Decision Tree
flowchart TD
Start[New Child Service] --> Q1{What is the service role?}
Q1 -->|PRIMARY| NO_PARENT[No parent<br/>parentServiceTemplate = NULL]
Q1 -->|INVENTORY<br/>ADDON<br/>REGISTRY| Q2{What service type<br/>is this for?}
Q2 -->|Mobile| Q3{Is this service shared<br/>across service types?}
Q2 -->|Internet| Q4{Is this service nested<br/>under another child?}
Q2 -->|VoIP| Q5{Is this service shared<br/>across service types?}
Q2 -->|Landline| Q6{Is this service shared<br/>across service types?}
Q3 -->|Yes, shared| SHARED_MOBILE[Parent: SVC_MOBILE_BASE<br/>Example: VOICEMAIL]
Q3 -->|No, Mobile-specific| MOBILE_PARENT[Parent: SVC_MOBILE_BASE<br/>Example: MSN, SIM, DATA]
Q4 -->|Yes, nested| Q7{What is the nesting parent?}
Q4 -->|No, flat| INTERNET_PARENT[Parent: SVC_NBN_BASE<br/>Example: NBN_DATA, MODEM]
Q7 -->|NBN Access| NBN_ACCESS_PARENT[Parent: SVC_NBN_ACCESS<br/>Example: NBN_AVC]
Q5 -->|Yes, shared| SHARED_VOIP[Parent: SVC_VOIP_BASE<br/>Example: VOICEMAIL]
Q5 -->|No, VoIP-specific| VOIP_PARENT[Parent: SVC_VOIP_BASE<br/>Example: VOIP_NUMBER, VOIP_DATA]
Q6 -->|Yes, shared| SHARED_LANDLINE[Parent: SVC_LANDLINE_BASE<br/>Example: VOICEMAIL]
Q6 -->|No, Landline-specific| LANDLINE_PARENT[Parent: SVC_LANDLINE_BASE<br/>Example: LANDLINE_NUMBER]
style NO_PARENT fill:#4CAF50
style MOBILE_PARENT fill:#2196F3
style NBN_ACCESS_PARENT fill:#FF5722
style INTERNET_PARENT fill:#2196F3
style VOIP_PARENT fill:#2196F3
style LANDLINE_PARENT fill:#2196F3
Detailed Decision Criteria
Rule 1: PRIMARY services have NO parent
IF service role = PRIMARY
THEN parentServiceTemplate = null
Examples:
- SVC_MOBILE_BASE → No parent
- SVC_NBN_BASE → No parent
- SVC_VOIP_BASE → No parent
- SVC_LANDLINE_BASE → No parent
Rationale: PRIMARY services are root services (billable subscriptions). They cannot have parents.
Rule 2: Mobile child services → Parent is MOBILE_BASE
IF service is Mobile-specific (not shared)
THEN parentServiceTemplate = SVC_MOBILE_BASE
Examples:
- SVC_MSN_STANDARD → Parent: SVC_MOBILE_BASE
- SVC_SIM_PHYSICAL → Parent: SVC_MOBILE_BASE
- SVC_MOBILE_DATA_25GB → Parent: SVC_MOBILE_BASE
- SVC_INTL_ROAMING → Parent: SVC_MOBILE_BASE
- SVC_NUMBER_REGISTRY_AU_IPND → Parent: SVC_MOBILE_BASE
Exception: Shared services (VOICEMAIL) also use MOBILE_BASE as parent (when activated for Mobile).
Rule 3: Internet child services → Parent is NBN_BASE (flat) or NBN_ACCESS (nested)
IF service is Internet-specific AND flat hierarchy
THEN parentServiceTemplate = SVC_NBN_BASE
Examples:
- SVC_NBN_ACCESS → Parent: SVC_NBN_BASE
- SVC_NBN_DATA_100GB → Parent: SVC_NBN_BASE
- SVC_DEVICE_MODEM → Parent: SVC_NBN_BASE
- SVC_STATIC_IP → Parent: SVC_NBN_BASE
IF service is Internet-specific AND nested under NBN_ACCESS
THEN parentServiceTemplate = SVC_NBN_ACCESS
Examples:
- SVC_NBN_AVC → Parent: SVC_NBN_ACCESS (NOT SVC_NBN_BASE)
Rationale: Internet hierarchy has nested structure (3 levels). NBN_AVC is technical component of NBN_ACCESS.
Rule 4: VoIP child services → Parent is VOIP_BASE
IF service is VoIP-specific (not shared)
THEN parentServiceTemplate = SVC_VOIP_BASE
Examples:
- SVC_VOIP_NUMBER → Parent: SVC_VOIP_BASE
- SVC_VOIP_DATA → Parent: SVC_VOIP_BASE
- SVC_DEVICE_ATA → Parent: SVC_VOIP_BASE
- SVC_CALL_FORWARDING → Parent: SVC_VOIP_BASE (if VoIP-specific)
Exception: Shared services (VOICEMAIL, CALL_FORWARDING) also use VOIP_BASE as parent (when activated for VoIP).
Rule 5: Landline child services → Parent is LANDLINE_BASE
IF service is Landline-specific (not shared)
THEN parentServiceTemplate = SVC_LANDLINE_BASE
Examples:
- SVC_LANDLINE_NUMBER → Parent: SVC_LANDLINE_BASE
- SVC_LANDLINE_FEATURES → Parent: SVC_LANDLINE_BASE
- SVC_CALLER_ID → Parent: SVC_LANDLINE_BASE
Exception: Shared services (VOICEMAIL, CALL_FORWARDING) also use LANDLINE_BASE as parent (when activated for Landline).
Rule 6: Shared services → Parent depends on activation context
IF service is shared across service types (VOICEMAIL, CALL_FORWARDING)
THEN parentServiceTemplate = context-dependent
Examples:
- SVC_VOICEMAIL activated for Mobile → Parent: SVC_MOBILE_BASE
- SVC_VOICEMAIL activated for VoIP → Parent: SVC_VOIP_BASE
- SVC_VOICEMAIL activated for Landline → Parent: SVC_LANDLINE_BASE
Implementation: ServiceTemplate allows multiple parent templates. ServiceInstance determines parent at activation time.
Rule 7: Nested services → Parent is immediate parent (not root)
IF service is nested under another child service
THEN parentServiceTemplate = immediate parent code
Examples:
- SVC_NBN_AVC → Parent: SVC_NBN_ACCESS (immediate parent)
- SVC_VOICEMAIL_BASIC → Parent: SVC_VOICEMAIL (immediate parent)
- SVC_VOICEMAIL_VISUAL → Parent: SVC_VOICEMAIL (immediate parent)
Rationale: Nested hierarchies require correct parent assignment at each level. NBN_AVC parent is NBN_ACCESS, NOT NBN_BASE.
Parent Selection Matrix
| Child Service | Service Type | Parent Service | Nesting Level |
|---|---|---|---|
| Mobile Services | |||
| MSN_STANDARD | Mobile | MOBILE_BASE | 1 |
| SIM_PHYSICAL | Mobile | MOBILE_BASE | 1 |
| MOBILE_DATA_25GB | Mobile | MOBILE_BASE | 1 |
| NUMBER_REGISTRY_AU_IPND | Mobile | MOBILE_BASE | 1 |
| VOICEMAIL | Mobile (shared) | MOBILE_BASE | 1 |
| VOICEMAIL_BASIC | Mobile (shared) | VOICEMAIL | 2 |
| Internet Services | |||
| NBN_ACCESS | Internet | NBN_BASE | 1 |
| NBN_AVC | Internet | NBN_ACCESS | 2 (nested) |
| NBN_DATA_100GB | Internet | NBN_BASE | 1 |
| DEVICE_MODEM | Internet | NBN_BASE | 1 |
| STATIC_IP | Internet | NBN_BASE | 1 |
| VoIP Services | |||
| VOIP_NUMBER | VoIP | VOIP_BASE | 1 |
| VOIP_DATA | VoIP | VOIP_BASE | 1 |
| DEVICE_ATA | VoIP | VOIP_BASE | 1 |
| VOICEMAIL | VoIP (shared) | VOIP_BASE | 1 |
| Landline Services | |||
| LANDLINE_NUMBER | Landline | LANDLINE_BASE | 1 |
| LANDLINE_FEATURES | Landline | LANDLINE_BASE | 1 |
| VOICEMAIL | Landline (shared) | LANDLINE_BASE | 1 |
Most services are Level 1 (flat hierarchy). Only Internet (NBN_AVC) and shared services (VOICEMAIL children) have Level 2 nesting.
Common Mistakes
Mistake 1: Wrong Parent for NBN_AVC
NBN_AVC parent = NBN_BASE
<update tableName="cat_service_template">
<column name="parent_service_template_id"
valueComputed="(SELECT id FROM cat_service_template WHERE code = 'SVC_NBN_BASE')" />
<where>code = 'SVC_NBN_AVC'</where>
</update>
NBN_AVC parent = NBN_ACCESS
<update tableName="cat_service_template">
<column name="parent_service_template_id"
valueComputed="(SELECT id FROM cat_service_template WHERE code = 'SVC_NBN_ACCESS')" />
<where>code = 'SVC_NBN_AVC'</where>
</update>
Impact: Wrong parent breaks nested hierarchy, causes activation failures.
Mistake 2: PRIMARY Service with Parent
MOBILE_BASE with parent
{
code: 'SVC_MOBILE_BASE',
role: ServiceRole.PRIMARY,
parentServiceTemplate: 'SVC_SOME_PARENT' // ← WRONG
}
PRIMARY services have NO parent
{
code: 'SVC_MOBILE_BASE',
role: ServiceRole.PRIMARY,
parentServiceTemplate: null // ← CORRECT
}
Impact: PRIMARY services with parents cannot be activated (validation error).
Mistake 3: INVENTORY/ADDON Without Parent
MSN without parent
{
code: 'SVC_MSN_STANDARD',
role: ServiceRole.INVENTORY,
parentServiceTemplate: null // ← WRONG
}
MSN with parent
{
code: 'SVC_MSN_STANDARD',
role: ServiceRole.INVENTORY,
parentServiceTemplate: 'SVC_MOBILE_BASE' // ← CORRECT
}
Impact: INVENTORY/ADDON services without parents are "orphaned" and cannot be activated.
Validation Checklist
After selecting parent service, verify:
- PRIMARY services have
parentServiceTemplate = null - All INVENTORY services have parent assigned
- All ADDON services have parent assigned
- All REGISTRY services have parent assigned
- NBN_AVC parent = NBN_ACCESS (NOT NBN_BASE)
- VOICEMAIL children parent = VOICEMAIL (NOT MOBILE_BASE/VOIP_BASE)
- Shared services have correct parent for activation context