Specification
- Skill ID
- personamanagmentlayer/pcl/telecommunications-expert
- Publisher
- personamanagmentlayer
- Repository
- pcl
- Installs
- 0
- Files
- 2
- Synced
- Sep 23, 2026
How to use it
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
personamanagmentlayer/pcl/telecommunications-expertInstalls these files- SKILL.md
- references/NETWORK_MANAGEMENT_SYSTEM.md
What this skill tells the agent
Telecommunications Expert
Expert guidance for telecommunications systems, network management, billing systems, 5G networks, SDN/NFV, and telecom infrastructure management.
Core Concepts
Telecommunications Systems
- Operations Support Systems (OSS)
- Business Support Systems (BSS)
- Network Management Systems (NMS)
- Service Assurance
- Inventory Management
- Provisioning systems
- Customer care platforms
Network Technologies
- 5G/4G/LTE networks
- Fiber optic networks
- Software-Defined Networking (SDN)
- Network Functions Virtualization (NFV)
- Edge computing
- IoT connectivity
- Satellite communications
Standards and Protocols
- 3GPP standards
- TM Forum Frameworx
- ETSI specifications
- ITU-T recommendations
- SIP (Session Initiation Protocol)
- Diameter protocol
- SNMP for network management
Billing System
from decimal import Decimal
@dataclass
class Subscriber:
"""Telecom subscriber"""
subscriber_id: str
account_number: str
name: str
phone_number: str
email: str
address: dict
plan_id: str
status: str # 'active', 'suspended', 'terminated'
activation_date: datetime
@dataclass
class ServicePlan:
"""Service plan/package"""
plan_id: str
name: str
description: str
monthly_fee: Decimal
data_allowance_gb: float
voice_minutes: int
sms_count: int
overage_rates: dict
@dataclass
class UsageRecord:
"""Usage record for billing"""
record_id: str
subscriber_id: str
usage_type: str # 'voice', 'sms', 'data'
timestamp: datetime
quantity: float
unit: str
destination: Optional[str]
charged: bool
class BillingSystem:
"""Telecom billing and charging system"""
def __init__(self):
self.subscribers = {}
self.service_plans = {}
self.usage_records = []
self.invoices = []
def process_usage(self, usage: UsageRecord) -> dict:
"""Process usage record for charging"""
subscriber = self.subscribers.get(usage.subscriber_id)
if not subscriber:
return {'error': 'Subscriber not found'}
if subscriber.status != 'active':
return {'error': 'Subscriber not active'}
plan = self.service_plans.get(subscriber.plan_id)
if not plan:
return {'error': 'Service plan not found'}
# Check if usage is within plan allowance
current_usage = self._get_current_month_usage(usage.subscriber_id, usage.usage_type)
charge = Decimal('0')
if usage.usage_type == 'data':
if current_usage > plan.data_allowance_gb:
# Overage charges
overage_gb = usage.quantity
charge = Decimal(str(overage_gb)) * plan.overage_rates['data_per_gb']
elif usage.usage_type == 'voice':
if current_usage > plan.voice_minutes:
# Overage charges
overage_minutes = usage.quantity
charge = Decimal(str(overage_minutes)) * plan.overage_rates['voice_per_minute']
elif usage.usage_type == 'sms':
if current_usage > plan.sms_count:
# Overage charges
overage_sms = usage.quantity
charge = Decimal(str(overage_sms)) * plan.overage_rates['sms_per_message']
usage.charged = True
self.usage_records.append(usage)
return {
'subscriber_id': usage.subscriber_id,
'usage_type': usage.usage_type,
'quantity': usage.quantity,
'charge': float(charge),
'within_allowance': charge == 0
}
def generate_invoice(self, subscriber_id: str, billing_period: tuple) -> dict:
"""Generate monthly invoice"""
subscriber = self.subscribers.get(subscriber_id)
if not subscriber:
return {'error': 'Subscriber not found'}
plan = self.service_plans.get(subscriber.plan_id)
start_date, end_date = billing_period
# Base charges
monthly_fee = plan.monthly_fee
# Usage charges
period_usage = [
u for u in self.usage_records
if u.subscriber_id == subscriber_id and
start_date <= u.timestamp <= end_date
]
usage_charges = self._calculate_usage_charges(period_usage, plan)
# Taxes (simplified)
subtotal = monthly_fee + usage_charges['total']
tax_rate = Decimal('0.10') # 10%
taxes = subtotal * tax_rate
total = subtotal + taxes
invoice = {
'invoice_id': self._generate_invoice_id(),
'subscriber_id': subscriber_id,
'account_number': subscriber.account_number,
'billing_period': {
'start': start_date.isoformat(),
'end': end_date.isoformat()
},
'charges': {
'monthly_fee': float(monthly_fee),
'data_charges': float(usage_charges['data']),
'voice_charges': float(usage_charges['voice']),
'sms_charges': float(usage_charges['sms']),
'other_charges': float(usage_charges['other'])
},
'subtotal': float(subtotal),
'taxes': float(taxes),
'total': float(total),
'due_date': (end_date + timedelta(days=15)).isoformat()
}
self.invoices.append(invoice)
return invoice
def _get_current_month_usage(self, subscriber_id: str, usage_type: str) -> float:
"""Get current month usage for subscriber"""
current_month_start = datetime.now().replace(day=1, hour=0, minute=0, second=0)
usage = [
u for u in self.usage_records
if u.subscriber_id == subscriber_id and
u.usage_type == usage_type and
u.timestamp >= current_month_start
]
total = sum(u.quantity for u in usage)
return total
def _calculate_usage_charges(self,
usage_records: List[UsageRecord],
plan: ServicePlan) -> dict:
"""Calculate usage charges"""
charges = {
'data': Decimal('0'),
'voice': Decimal('0'),
'sms': Decimal('0'),
'other': Decimal('0'),
'total': Decimal('0')
}
# Group usage by type
data_usage = sum(u.quantity for u in usage_records if u.usage_type == 'data')
voice_usage = sum(u.quantity for u in usage_records if u.usage_type == 'voice')
sms_usage = sum(u.quantity for u in usage_records if u.usage_type == 'sms')
# Calculate overage charges
if data_usage > plan.data_allowance_gb:
overage = data_usage - plan.data_allowance_gb
charges['data'] = Decimal(str(overage)) * plan.overage_rates['data_per_gb']
if voice_usage > plan.voice_minutes:
overage = voice_usage - plan.voice_minutes
charges['voice'] = Decimal(str(overage)) * plan.overage_rates['voice_per_minute']
if sms_usage > plan.sms_count:
overage = sms_usage - plan.sms_count
charges['sms'] = Decimal(str(overage)) * plan.overage_rates['sms_per_message']
charges['total'] = sum([charges['data'], charges['voice'], charges['sms'], charges['other']])
return charges
def _generate_invoice_id(self) -> str:
import uuid
return f"INV-{uuid.uuid4().hex[:10].upper()}"5G Network Management
class FiveGNetworkManagement:
"""5G network management and optimization"""
def __init__(self):
self.base_stations = {}
self.network_slices = {}
def configure_network_slice(self, slice_config: dict) -> dict:
"""Configure 5G network slice"""
slice_id = self._generate_slice_id()
network_slice = {
'slice_id': slice_id,
'name': slice_config['name'],More from personamanagmentlayer
Use this skill in a project
Open any RiverX project, search the Skills panel for personamanagmentlayer/pcl/telecommunications-expert, and install it in one click.
