Parent-Child Relationships
Parent-Child Relationships track the physical assembly structure of your assets - what components are physically inside or attached to other assets.
Understanding Physical Hierarchy
Classification vs Physical Hierarchy
Asset Pro uses two separate structures for different purposes:
| Classification Hierarchy | Physical Hierarchy |
|---|---|
| Purpose: Organizational taxonomy | Purpose: Physical composition |
| Question: "What TYPE is this asset?" | Question: "What's INSIDE this asset?" |
| Example: Commercial → Cargo Ship → Panamax | Example: Vessel → Engine → Turbocharger |
| Structure: Defined in Classification Levels/Values | Structure: Defined via Parent Asset No. on assets |
| Unlimited levels (up to 50) | Unlimited depth (up to 100 levels) |
Don't Confuse the Two
Classification is about categorization: "This is a Panamax Bulk Carrier"
Physical Hierarchy is about composition: "This vessel contains Engine #1"
They are completely independent:
-
A vessel can be classified as "Panamax" (classification)
-
AND contain an engine as a child asset (physical hierarchy)
Real-World Example: Marine Vessel
Classification Structure:
Industry: Fleet Management ├─ Level 1: Fleet Type = "Commercial" ├─ Level 2: Vessel Category = "Cargo Ship" └─ Level 3: Vessel Model = "Panamax Bulk Carrier"
Physical Hierarchy:
MV-001: Main Vessel (Panamax Bulk Carrier) ├─ ENG-001: Main Engine (Diesel Engine) │ ├─ TC-001: Turbocharger (Turbo Component) │ ├─ FP-001: Fuel Pump (Pump) │ └─ OC-001: Oil Cooler (Cooling System) ├─ ENG-002: Auxiliary Engine (Generator) └─ PROP-001: Propeller (Propulsion Component)
Both structures coexist:
-
Each asset has its own classification (what type it is)
-
Each asset may have a parent (what it's physically inside)
Creating Parent-Child Relationships
Assigning a Parent Asset
-
Open the Asset Card for the child asset
-
Go to Physical Hierarchy group
-
In Parent Asset No. field, select the parent asset
-
System automatically calculates:
-
Hierarchy Level - Depth in tree (1, 2, 3, etc.)
-
Root Asset No. - Top-most ancestor
-
Example: Adding Engine to Vessel
Before: Asset: ENG-001 (Main Engine) Parent Asset No.: (blank) Hierarchy Level: 1 Root Asset No.: (blank)
After assigning parent: Asset: ENG-001 (Main Engine) Parent Asset No.: MV-001 Hierarchy Level: 2 (child of vessel) Root Asset No.: MV-001 (top-most parent)
Creating Multi-Level Hierarchies
You can create unlimited levels by assigning parents in sequence.
Step 1: Create Vessel (root asset)
Asset: MV-001 (Main Vessel) Parent Asset No.: (blank) Hierarchy Level: 1 Root Asset No.: (blank)
Step 2: Create Engine as child of Vessel
Asset: ENG-001 (Main Engine) Parent Asset No.: MV-001 Hierarchy Level: 2 Root Asset No.: MV-001
Step 3: Create Turbocharger as child of Engine
Asset: TC-001 (Turbocharger) Parent Asset No.: ENG-001 Hierarchy Level: 3 Root Asset No.: MV-001
Result: Three-level hierarchy
MV-001 (Level 1, Root) └─ ENG-001 (Level 2, Root: MV-001) └─ TC-001 (Level 3, Root: MV-001)
Physical Hierarchy Fields
Parent Asset No.
Purpose: Links this asset to its physical parent
Behavior:
-
Leave blank for standalone assets (root assets)
-
Select another asset to make this a child asset
-
System validates to prevent circular references
Validation Rules:
-
❌ Cannot assign asset as its own parent
-
❌ Cannot create circular references (A→B→C→A)
-
❌ Parent must exist
-
✅ Can change parent (re-parents the asset)
-
✅ Can clear parent (makes asset standalone)
When you change parent:
-
Hierarchy Level recalculates
-
Root Asset No. recalculates
-
Entire sub-tree moves with the asset
Hierarchy Level (Read-Only)
Purpose: Shows depth in physical assembly tree
Values:
-
1 = Root asset (no parent)
-
2 = Direct child of root
-
3 = Grandchild of root
-
4+ = Deeper levels
Calculation:
-
Automatically calculated when Parent Asset No. is set
-
Parent's Level + 1
-
Recalculates when parent changes
Use Cases:
-
Filter assets by level (e.g., "Show only root assets" = Level 1)
-
Reports: "All Level 2 components across all vessels"
-
Identify depth of assembly structures
Root Asset No. (Read-Only)
Purpose: Points to the top-most parent in the hierarchy
Calculation:
-
System walks up parent chain until it finds asset with no parent
-
That asset is the root
-
All descendants share the same root
Example:
MV-001 (Root Asset No. = blank) ├─ ENG-001 (Root Asset No. = MV-001) │ └─ TC-001 (Root Asset No. = MV-001) └─ PROP-001 (Root Asset No. = MV-001)
Use Cases:
-
Group all components: Filter by Root Asset No. = MV-001
-
Complete assembly view: Show all assets belonging to one root
-
Bulk operations: Transfer entire assembly by root
-
Reporting: "All components under Vessel MV-001"
Has Children (FlowField)
Purpose: Indicates if this asset has child assets
Calculation:
-
FlowField: Checks if any assets have Parent Asset No. = this asset's No.
-
☑️ True = Has children
-
☐ False = No children (leaf asset)
Use Cases:
-
Identify parent vs leaf assets
-
Prevent deletion of assets with children
-
Reports: "All parent assets in the system"
Child Asset Count (FlowField)
Purpose: Counts how many direct children this asset has
Calculation:
-
FlowField: Count of assets where Parent Asset No. = this asset's No.
-
Direct children only (not grandchildren)
Example:
MV-001 ├─ ENG-001 │ ├─ TC-001 │ └─ FP-001 └─ PROP-001
Child Asset Count: MV-001: 2 (ENG-001, PROP-001) ENG-001: 2 (TC-001, FP-001) TC-001: 0
Validation Rules and Safeguards
Asset Pro enforces strict validation to maintain hierarchy integrity.
Rule 1: No Self-Parenting
Error: "Asset ASSET-0001 cannot be its own parent."
Cause: Trying to assign an asset as its own parent
Example:
Asset: ENG-001 Parent Asset No.: ENG-001 ❌ ERROR
Solution: Select a different asset as parent
Rule 2: No Circular References
Error: "Circular reference detected: Asset ASSET-0001 appears in its own parent chain."
Cause: Creating a circular loop in the parent chain
Example:
ENG-001 → Parent: MV-001 ✅ MV-001 → Parent: PROP-001 ✅ PROP-001 → Parent: ENG-001 ❌ ERROR (circular: ENG→MV→PROP→ENG)
Detection:
-
System walks up parent chain
-
If it encounters the current asset, it's circular
-
Checks up to 100 levels deep
Solution: Break the loop by assigning a different parent
Rule 3: Parent Must Exist
Error: "Parent asset ASSET-9999 does not exist."
Cause: Selected parent asset doesn't exist in Asset table
Solution: Select a valid existing asset
Rule 4: Maximum Depth Limit
Error: "Maximum parent chain depth of 100 levels exceeded for asset ASSET-0001."
Cause: Parent chain exceeds 100 levels
Why: Safety limit to prevent:
-
Circular references that evade detection
-
Performance issues with extremely deep trees
-
Data corruption scenarios
Solution:
-
Review hierarchy structure
-
Flatten excessive nesting
-
Investigate possible circular reference
Rule 5: Cannot Delete Parent with Children
Error: "Cannot delete asset ASSET-0001 because it has child assets."
Cause: Trying to delete an asset that has child assets
Solution:
-
Delete or re-parent all child assets first
-
Then delete the parent asset
Why: Prevents orphaned assets with invalid Parent Asset No.
Working with Hierarchies
Viewing Child Assets
From Asset Card:
-
Open parent asset's Asset Card
-
Note the Child Asset Count field
-
To see children:
-
Go to Assets list
-
Filter:
Parent Asset No. = (current asset No.) -
Shows all direct children
-
Future Enhancement:
-
Dedicated "Child Assets" FactBox on Asset Card
-
Tree view of hierarchy
-
Drill-down navigation
Viewing Entire Assembly
Show all components under a root asset:
-
Note the Root Asset No. of any asset in the assembly
-
Go to Assets list
-
Filter:
Root Asset No. = (root asset number) -
Result: All assets in the entire assembly tree
Example:
Filter: Root Asset No. = MV-001
Results: ENG-001 (Level 2) TC-001 (Level 3) FP-001 (Level 3) OC-001 (Level 3) ENG-002 (Level 2) PROP-001 (Level 2)
Re-Parenting Assets
You can change the parent of an asset at any time.
Effect of Re-Parenting:
-
Asset moves to new parent
-
Hierarchy Level recalculates
-
Root Asset No. recalculates
-
Entire sub-tree moves with the asset
Example: Move Engine to Different Vessel
Before: MV-001 └─ ENG-001 └─ TC-001
Change: ENG-001 → Parent Asset No. = MV-002
After: MV-001 (empty now)
MV-002 └─ ENG-001 (moved) └─ TC-001 (moved automatically with parent)
Use Cases:
-
Component replacement/swapping
-
Asset relocations
-
Maintenance cycles (remove/reinstall components)
Making Asset Standalone
To remove an asset from a hierarchy:
-
Open the Asset Card
-
Clear Parent Asset No. field
-
System updates:
-
Hierarchy Level = 1
-
Root Asset No. = (blank)
-
Effect:
-
Asset becomes a root asset
-
Any child assets remain attached (they stay children)
Example:
Before: MV-001 └─ ENG-001 └─ TC-001
Clear: ENG-001 → Parent Asset No. = (blank)
After: MV-001 (no children)
ENG-001 (now root) └─ TC-001 (still child of ENG-001)
Use Cases and Examples
Use Case 1: Marine Vessel Components
Scenario: Track all components of a cargo vessel
Structure:
MV-PANAMA-001 (Panamax Bulk Carrier) ├─ ENG-MAIN-001 (Main Propulsion Engine) │ ├─ TC-HIGH-001 (High Pressure Turbocharger) │ ├─ TC-LOW-001 (Low Pressure Turbocharger) │ ├─ FP-MAIN-001 (Main Fuel Pump) │ └─ OC-ENG-001 (Engine Oil Cooler) ├─ ENG-AUX-001 (Auxiliary Generator Engine) ├─ ENG-AUX-002 (Auxiliary Generator Engine) ├─ PROP-001 (Fixed Pitch Propeller) └─ NAV-001 (Navigation Equipment Suite) ├─ RADAR-001 (Radar System) ├─ GPS-001 (GPS System) └─ AIS-001 (AIS Transponder)
Benefits:
-
Complete bill of materials for vessel
-
Track component locations
-
Maintenance planning per component
-
Replacement history
-
Spare parts management
Use Case 2: Medical Equipment Assembly
Scenario: Track components of MRI machine
Structure:
MRI-750W-EAST (GE MRI Scanner) ├─ MAGNET-001 (Superconducting Magnet) │ └─ COOL-001 (Cryogenic Cooling System) ├─ RF-001 (RF Coil System) │ ├─ COIL-HEAD-001 (Head Coil) │ ├─ COIL-BODY-001 (Body Coil) │ └─ COIL-KNEE-001 (Knee Coil) ├─ COMP-001 (Computer System) └─ TABLE-001 (Patient Table)
Benefits:
-
Track expensive modular components
-
Component-specific maintenance schedules
-
Replacement cost tracking
-
Warranty management per component
-
Utilization tracking
Use Case 3: Construction Equipment
Scenario: Track attachments for excavator
Structure:
EX-320D-003 (CAT 320D Excavator) ├─ BUCKET-24IN (24" Digging Bucket) ├─ BUCKET-36IN (36" Digging Bucket) ├─ HAMMER-H120 (Hydraulic Hammer) └─ GRAPPLE-001 (Grapple Attachment)
Benefits:
-
Track interchangeable attachments
-
Know which attachments are currently installed
-
Maintenance per attachment
-
Billing for attachment usage
-
Inventory of available attachments
Use Case 4: IT Infrastructure
Scenario: Track components in server rack
Structure:
RACK-DC1-R08 (Data Center Rack 8) ├─ SRV-001 (Database Server) │ ├─ HDD-001 (4TB HDD) │ ├─ HDD-002 (4TB HDD) │ └─ RAM-64GB (64GB RAM Module) ├─ SRV-002 (Application Server) ├─ SRV-003 (Web Server) ├─ SW-001 (48-Port Network Switch) └─ UPS-001 (Rack UPS 3000VA)
Benefits:
-
Physical location tracking
-
Component-level asset tracking
-
Upgrade/replacement history
-
CMDB integration
-
Configuration management
Best Practices
When to Use Parent-Child
✅ Use for:
-
Physical components: Engine is inside vessel
-
Installed attachments: Bucket on excavator
-
Rack-mounted equipment: Server in rack
-
Modular assemblies: Coils in MRI machine
-
Removable parts: Swappable components
❌ Don't use for:
-
Classification: Use Classification Levels instead
-
Location tracking: Use Current Holder instead
-
Organizational structure: Use Classification instead
-
Related assets: Not the same as "related to"
Hierarchy Design Tips
Start Shallow:
-
Begin with 1-2 levels: Parent → Child
-
Add deeper levels as needed
-
Don't over-engineer initially
Logical Grouping:
-
Group by physical containment
-
Match how assets are actually assembled
-
Think: "If I disassemble this, what comes out?"
Practical Depth:
-
Most hierarchies are 2-4 levels deep
-
Going deeper than 5 levels is rare
-
If approaching 10+ levels, reconsider structure
Component Naming:
-
Include parent reference in child description
-
Example: "Main Engine - Turbocharger" (not just "Turbocharger")
-
Helps identification when viewing flat asset lists
Maintenance and Updates
Document Changes:
-
Record why components were re-parented
-
Use Description or notes
-
Tracks component swap history
Regular Review:
-
Quarterly: Verify hierarchy matches physical reality
-
After maintenance: Update component relationships
-
Before decommission: Break down assemblies
Handle Removed Components:
-
When component removed: Clear Parent Asset No.
-
Don't delete (preserves history)
-
Set Status = Disposed if component retired
Reporting and Analysis
Common Reports
Component Count by Root Asset
-
Filter:
Root Asset No. = specific asset -
Group by: Hierarchy Level
-
Shows: Complete assembly structure
Parent Assets Report
-
Filter:
Has Children = Yes -
Shows: All assets that contain components
-
Use: Identify major assemblies
Orphaned Assets Check
-
Filter:
Parent Asset No. <> blank -
Cross-check: Parent asset exists
-
Purpose: Data quality validation
Hierarchy Depth Analysis
-
Group by: Hierarchy Level
-
Shows: Distribution of assets by level
-
Identifies: Overly complex structures
Future Enhancements
Phase 1 MVP includes core parent-child structure. Future phases will add:
-
Tree View: Visual hierarchy browser
-
FactBoxes: Show children on Asset Card
-
Drag-Drop: Reorganize hierarchy visually
-
Bulk Operations: Move entire branches
-
BOM Reports: Complete assembly reports
-
Cost Rollup: Sum component costs to parent