swiftops-backend / docs /examples /activation_requirements_examples.py
kamau1's picture
feat: add smart validation for activation requirements with 6 new field types and auto-generated validation rules
dddd6c6
"""
Activation Requirements Examples - Smart Validation
Examples showing how to define activation requirements with minimal input.
System automatically provides validation rules, placeholders, and help text.
"""
# Example 1: FTTH Installation (Minimal Input)
ftth_minimal = {
"title": "Nairobi FTTH Rollout 2025",
"project_type": "installation",
"service_type": "ftth",
"activation_requirements": [
{
"field": "customer_phone",
"label": "Customer Phone Number",
"type": "phone",
"required": True
},
{
"field": "customer_email",
"label": "Customer Email",
"type": "email",
"required": False
},
{
"field": "ont_serial",
"label": "ONT Serial Number",
"type": "serial_number",
"required": True
},
{
"field": "ont_mac",
"label": "ONT MAC Address",
"type": "mac_address",
"required": True
},
{
"field": "router_serial",
"label": "Router Serial Number",
"type": "serial_number",
"required": False
},
{
"field": "static_ip",
"label": "Static IP Address",
"type": "ip_address",
"required": False
},
{
"field": "speed_test_download",
"label": "Download Speed (Mbps)",
"type": "number",
"required": True
},
{
"field": "speed_test_upload",
"label": "Upload Speed (Mbps)",
"type": "number",
"required": True
},
{
"field": "customer_portal_url",
"label": "Customer Portal URL",
"type": "url",
"required": False
}
]
}
# Example 2: FTTH with Custom Validation (Override Defaults)
ftth_custom = {
"title": "Huawei FTTH Project",
"project_type": "installation",
"service_type": "ftth",
"activation_requirements": [
{
"field": "customer_phone",
"label": "Customer Phone Number",
"type": "phone",
"required": True,
"pattern": r"^\+254[0-9]{9}$", # Kenya-specific format
"placeholder": "+254712345678",
"help_text": "Enter Kenyan phone number starting with +254"
},
{
"field": "ont_serial",
"label": "ONT Serial Number",
"type": "serial_number",
"required": True,
"pattern": r"^HW[0-9]{8}$", # Huawei-specific format
"min_length": 10,
"max_length": 10,
"placeholder": "HW12345678",
"help_text": "Huawei ONT format: HW followed by 8 digits"
},
{
"field": "ont_mac",
"label": "ONT MAC Address",
"type": "mac_address",
"required": True
# Uses smart defaults: pattern, min/max length, placeholder, help_text
},
{
"field": "speed_test_download",
"label": "Download Speed (Mbps)",
"type": "number",
"required": True,
"help_text": "Minimum 50 Mbps required for 100 Mbps package"
}
]
}
# Example 3: Fixed Wireless Installation
fixed_wireless = {
"title": "Rural Fixed Wireless Project",
"project_type": "installation",
"service_type": "fixed_wireless",
"activation_requirements": [
{
"field": "customer_phone",
"label": "Customer Phone Number",
"type": "phone",
"required": True
},
{
"field": "cpe_serial",
"label": "CPE Serial Number",
"type": "serial_number",
"required": True
},
{
"field": "cpe_mac",
"label": "CPE MAC Address",
"type": "mac_address",
"required": True
},
{
"field": "signal_strength",
"label": "Signal Strength (dBm)",
"type": "number",
"required": True,
"help_text": "Signal strength in dBm (e.g., -65)"
},
{
"field": "tower_name",
"label": "Tower/Base Station Name",
"type": "text",
"required": True,
"max_length": 100
},
{
"field": "installation_height",
"label": "Installation Height (meters)",
"type": "number",
"required": False
}
]
}
# Example 4: Support Ticket (Equipment Replacement)
equipment_replacement = {
"title": "ONT Replacement Support",
"project_type": "support",
"service_type": "ftth",
"activation_requirements": [
{
"field": "customer_phone",
"label": "Customer Phone Number",
"type": "phone",
"required": True
},
{
"field": "old_ont_serial",
"label": "Old ONT Serial (Removed)",
"type": "serial_number",
"required": True
},
{
"field": "new_ont_serial",
"label": "New ONT Serial (Installed)",
"type": "serial_number",
"required": True
},
{
"field": "new_ont_mac",
"label": "New ONT MAC Address",
"type": "mac_address",
"required": True
},
{
"field": "issue_description",
"label": "Issue Description",
"type": "text",
"required": True,
"max_length": 500,
"help_text": "Describe the issue that required replacement"
},
{
"field": "issue_resolved",
"label": "Issue Resolved?",
"type": "boolean",
"required": True
}
]
}
# Example 5: Maintenance Ticket
maintenance_ticket = {
"title": "Network Maintenance",
"project_type": "maintenance",
"activation_requirements": [
{
"field": "maintenance_type",
"label": "Maintenance Type",
"type": "select",
"required": True,
"options": ["Preventive", "Corrective", "Emergency", "Upgrade"]
},
{
"field": "affected_equipment",
"label": "Affected Equipment",
"type": "text",
"required": True,
"max_length": 200
},
{
"field": "downtime_start",
"label": "Downtime Start",
"type": "date",
"required": False
},
{
"field": "downtime_end",
"label": "Downtime End",
"type": "date",
"required": False
},
{
"field": "work_performed",
"label": "Work Performed",
"type": "text",
"required": True,
"max_length": 1000
}
]
}
# Example 6: What Frontend Receives (Auto-Enhanced)
# When frontend calls GET /api/v1/tickets/{id}/checklist
frontend_receives = {
"field_items": [
{
"id": "field_customer_phone",
"type": "field",
"field_name": "customer_phone",
"label": "Customer Phone Number",
"data_type": "phone",
"required": True,
"placeholder": "+254XXXXXXXXX", # Auto-generated
"help_text": "Enter phone number with country code", # Auto-generated
"validation": {
"min_length": 10, # Auto-set
"max_length": 15, # Auto-set
"pattern": r"^\+?[0-9]{10,15}$" # Auto-set
},
"value": None,
"status": "pending"
},
{
"id": "field_ont_serial",
"type": "field",
"field_name": "ont_serial",
"label": "ONT Serial Number",
"data_type": "serial_number",
"required": True,
"placeholder": "ABC123XYZ", # Auto-generated
"help_text": "Enter equipment serial number", # Auto-generated
"validation": {
"min_length": 6, # Auto-set
"max_length": 30, # Auto-set
"pattern": r"^[A-Z0-9\-]+$" # Auto-set
},
"value": None,
"status": "pending"
},
{
"id": "field_ont_mac",
"type": "field",
"field_name": "ont_mac",
"label": "ONT MAC Address",
"data_type": "mac_address",
"required": True,
"placeholder": "AA:BB:CC:DD:EE:FF", # Auto-generated
"help_text": "Enter MAC address (format: AA:BB:CC:DD:EE:FF)", # Auto-generated
"validation": {
"min_length": 17, # Auto-set
"max_length": 17, # Auto-set
"pattern": r"^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$" # Auto-set
},
"value": None,
"status": "pending"
}
]
}
# Example 7: Validation Errors (Type-Specific Messages)
validation_errors = {
"message": "Completion data validation failed",
"errors": [
{
"field_name": "customer_phone",
"error_message": "Customer Phone Number must be at least 10 characters"
},
{
"field_name": "ont_mac",
"error_message": "ONT MAC Address: Enter MAC address (format: AA:BB:CC:DD:EE:FF)"
},
{
"field_name": "speed_test_download",
"error_message": "Download Speed (Mbps) must be a valid number"
},
{
"field_name": "customer_email",
"error_message": "Customer Email: Enter valid email address"
}
]
}