Skip to main content

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 ServiceService TypeParent ServiceNesting Level
Mobile Services
MSN_STANDARDMobileMOBILE_BASE1
SIM_PHYSICALMobileMOBILE_BASE1
MOBILE_DATA_25GBMobileMOBILE_BASE1
NUMBER_REGISTRY_AU_IPNDMobileMOBILE_BASE1
VOICEMAILMobile (shared)MOBILE_BASE1
VOICEMAIL_BASICMobile (shared)VOICEMAIL2
Internet Services
NBN_ACCESSInternetNBN_BASE1
NBN_AVCInternetNBN_ACCESS2 (nested)
NBN_DATA_100GBInternetNBN_BASE1
DEVICE_MODEMInternetNBN_BASE1
STATIC_IPInternetNBN_BASE1
VoIP Services
VOIP_NUMBERVoIPVOIP_BASE1
VOIP_DATAVoIPVOIP_BASE1
DEVICE_ATAVoIPVOIP_BASE1
VOICEMAILVoIP (shared)VOIP_BASE1
Landline Services
LANDLINE_NUMBERLandlineLANDLINE_BASE1
LANDLINE_FEATURESLandlineLANDLINE_BASE1
VOICEMAILLandline (shared)LANDLINE_BASE1
Key Observation

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

Incorrect

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>
Correct

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

Incorrect

MOBILE_BASE with parent

{
code: 'SVC_MOBILE_BASE',
role: ServiceRole.PRIMARY,
parentServiceTemplate: 'SVC_SOME_PARENT' // ← WRONG
}
Correct

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

Incorrect

MSN without parent

{
code: 'SVC_MSN_STANDARD',
role: ServiceRole.INVENTORY,
parentServiceTemplate: null // ← WRONG
}
Correct

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