{
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "$id": "https://example.com/tmf622-product-order-fvo.schema.json",
    "title": "Product Order Create Request",
    "$ref": "#/$defs/ProductOrder_FVO",
    "$defs": {
        "ProductOrder_FVO": {
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible_FVO"
                },
                {
                    "type": "object",
                    "required": [
                        "productOrderItem",
                        "category",
                        "orderPostedDate",
                        "requestedCompletionDate",
                        "relatedParty"
                    ],
                    "properties": {
                        "category": {
                            "type": "string",
                            "enum": [
                                "new",
                                "productChange",
                                "technologyChange",
                                "productModification",
                                "terminationByBuyer",
                                "terminationBySeller",
                                "providerChange",
                                "providerTechnologyChange",
                                "terminationProviderChange",
                                "portChange"
                            ],
                            "description": "Used to categorize the order from a business perspective",
                            "example": "new"
                        },
                        "description": {
                            "type": "string",
                            "description": "Description of the product order",
                            "minLength": 1,
                            "maxLength": 255
                        },
                        "orderPostedDate": {
                            "type": "string",
                            "description": "Date when the order request was created/posted",
                            "format": "date-time",
                            "example": "2024-05-11T10:31:00+02:00"
                        },
                        "priority": {
                            "type": "string",
                            "description": "A way that can be used by consumers to prioritize orders in OM system (from 0 to 4 : 0 is the highest priority, and 4 the lowest)",
                            "minLength": 1,
                            "maxLength": 10
                        },
                        "requestedCompletionDate": {
                            "description": "Expected completion date amended by the provider",
                            "type": "string",
                            "format": "date-time",
                            "example": "2024-05-11T10:31:00+02:00"
                        },
                        "externalId": {
                            "type": "array",
                            "description": "A reference to an externaly defined object in the context of the product order",
                            "minItems": 1,
                            "items": {
                                "$ref": "#/$defs/ExternalIdentifier"
                            }
                        },
                        "billingAccount": {
                            "$ref": "#/$defs/BillingAccountRef"
                        },
                        "note": {
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Note"
                            }
                        },
                        "productOfferingQualification": {
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOfferingQualificationRef"
                            }
                        },
                        "relatedParty": {
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/RelatedPartyOrPartyRole"
                            }
                        },
                        "attachment": {
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/AttachmentRefOrValue"
                            }
                        },
                        "productOrderRelationship": {
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOrderRelationship"
                            }
                        },
                        "additionalOrderInformation": {
                            "$ref": "#/$defs/AdditionalOrderInformation"
                        }
                    },
                    "allOf": [
                        {
                            "properties": {
                                "relatedParty": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "properties": {
                                            "partyOrPartyRole": {
                                                "type": "object",
                                                "properties": {
                                                    "contactMedium": {
                                                        "type": "array",
                                                        "items": {
                                                            "type": "object",
                                                            "oneOf": [
                                                                {
                                                                    "properties": {
                                                                        "@type": {
                                                                            "type": "string",
                                                                            "const": "PhoneContactMedium"
                                                                        },
                                                                        "contactType": {
                                                                            "type": "string",
                                                                            "enum": [
                                                                                "fixed",
                                                                                "mobile"
                                                                            ]
                                                                        },
                                                                        "phoneNumber": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 30
                                                                        }
                                                                    },
                                                                    "required": [
                                                                        "contactType",
                                                                        "phoneNumber"
                                                                    ]
                                                                },
                                                                {
                                                                    "properties": {
                                                                        "@type": {
                                                                            "type": "string",
                                                                            "const": "EmailContactMedium"
                                                                        },
                                                                        "contactType": {
                                                                            "type": "string",
                                                                            "enum": [
                                                                                "email"
                                                                            ]
                                                                        },
                                                                        "emailAddress": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 255
                                                                        }
                                                                    },
                                                                    "required": [
                                                                        "contactType",
                                                                        "emailAddress"
                                                                    ]
                                                                },
                                                                {
                                                                    "properties": {
                                                                        "@type": {
                                                                            "type": "string",
                                                                            "const": "PostalAddressContactMedium"
                                                                        },
                                                                        "contactType": {
                                                                            "type": "string",
                                                                            "enum": [
                                                                                "postal"
                                                                            ]
                                                                        },
                                                                        "city": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 40
                                                                        },
                                                                        "country": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 2
                                                                        },
                                                                        "locality": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 40
                                                                        },
                                                                        "postcode": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 6
                                                                        },
                                                                        "streetName": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 40
                                                                        },
                                                                        "streetNr": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 4
                                                                        },
                                                                        "streetNrSuffix": {
                                                                            "type": "string",
                                                                            "minLength": 1,
                                                                            "maxLength": 6
                                                                        }
                                                                    },
                                                                    "required": [
                                                                        "contactType",
                                                                        "city",
                                                                        "postcode",
                                                                        "streetName",
                                                                        "streetNr"
                                                                    ]
                                                                }
                                                            ]
                                                        }
                                                    }
                                                },
                                                "oneOf": [
                                                    {
                                                        "properties": {
                                                            "@type": {
                                                                "type": "string",
                                                                "const": "Individual"
                                                            },
                                                            "familyName": {
                                                                "type": "string",
                                                                "minLength": 1,
                                                                "maxLength": 30
                                                            },
                                                            "givenName": {
                                                                "type": "string",
                                                                "minLength": 1,
                                                                "maxLength": 30
                                                            },
                                                            "salutation": {
                                                                "type": "string",
                                                                "minLength": 1,
                                                                "maxLength": 30,
                                                                "description": "Recommendation: use Herr, Frau or keine Anrede"
                                                            }
                                                        },
                                                        "required": [
                                                            "familyName",
                                                            "salutation"
                                                        ]
                                                    },
                                                    {
                                                        "properties": {
                                                            "@type": {
                                                                "type": "string",
                                                                "const": "Organization"
                                                            },
                                                            "name": {
                                                                "type": "string",
                                                                "minLength": 1,
                                                                "maxLength": 60
                                                            }
                                                        },
                                                        "required": [
                                                            "name"
                                                        ]
                                                    }
                                                ]
                                            }
                                        },
                                        "oneOf": [
                                            {
                                                "properties": {
                                                    "role": {
                                                        "enum": [
                                                            "installationContact",
                                                            "technicalContact",
                                                            "ownerAdministrationContact",
                                                            "ownerInstallationContact",
                                                            "orderManagementSellerContact",
                                                            "orderManagementBuyerContact"
                                                        ]
                                                    },
                                                    "partyOrPartyRole": {
                                                        "type": "object",
                                                        "properties": {
                                                            "contactMedium": {
                                                                "type": "array",
                                                                "contains": {
                                                                    "type": "object",
                                                                    "properties": {
                                                                        "@type": {
                                                                            "type": "string",
                                                                            "const": "PhoneContactMedium"
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        },
                                                        "required": [
                                                            "contactMedium"
                                                        ]
                                                    }
                                                }
                                            },
                                            {
                                                "properties": {
                                                    "role": {
                                                        "enum": [
                                                            "deliveryContact"
                                                        ]
                                                    },
                                                    "partyOrPartyRole": {
                                                        "type": "object",
                                                        "properties": {
                                                            "contactMedium": {
                                                                "type": "array",
                                                                "contains": {
                                                                    "type": "object",
                                                                    "properties": {
                                                                        "@type": {
                                                                            "type": "string",
                                                                            "const": "PostalAddressContactMedium"
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        },
                                                        "required": [
                                                            "contactMedium"
                                                        ]
                                                    }
                                                }
                                            },
                                            {
                                                "properties": {
                                                    "role": {
                                                        "enum": [
                                                            "locationAContact",
                                                            "handingOverProvider",
                                                            "receivingProvider",
                                                            "subcontractor"
                                                        ]
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                },
                                "productOrderItem": {
                                    "allOf": [
                                        {
                                            "minItems": 1,
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/$defs/ProductOrderItem"
                                            }
                                        },
                                        {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "product": {
                                                        "properties": {
                                                            "relatedPlace": {
                                                                "type": "array",
                                                                "items": {
                                                                    "type": "object",
                                                                    "properties": {
                                                                        "role": {
                                                                            "enum": [
                                                                                "locationA",
                                                                                "locationB",
                                                                                "alternateAddress"
                                                                            ]
                                                                        }
                                                                    },
                                                                    "oneOf": [
                                                                        {
                                                                            "properties": {
                                                                                "place": {
                                                                                    "type": "object",
                                                                                    "properties": {
                                                                                        "@type": {
                                                                                            "const": "GeographicAddress"
                                                                                        }
                                                                                    }
                                                                                }
                                                                            }
                                                                        },
                                                                        {
                                                                            "properties": {
                                                                                "place": {
                                                                                    "type": "object",
                                                                                    "properties": {
                                                                                        "@type": {
                                                                                            "const": "GeographicSite"
                                                                                        },
                                                                                        "geographicSiteCharacteristic": {
                                                                                            "type": "array",
                                                                                            "items": {
                                                                                                "type": "object",
                                                                                                "required": [
                                                                                                    "name",
                                                                                                    "value"
                                                                                                ]
                                                                                            }
                                                                                        }
                                                                                    },
                                                                                    "required": [
                                                                                        "geographicSiteCharacteristic",
                                                                                        "place"
                                                                                    ]
                                                                                }
                                                                            }
                                                                        },
                                                                        {
                                                                            "properties": {
                                                                                "place": {
                                                                                    "type": "object",
                                                                                    "properties": {
                                                                                        "@type": {
                                                                                            "const": "PlaceRef"
                                                                                        },
                                                                                        "@referredType": {
                                                                                            "const": "GeographicAddress"
                                                                                        }
                                                                                    },
                                                                                    "required": [
                                                                                        "id",
                                                                                        "@referredType"
                                                                                    ]
                                                                                }
                                                                            }
                                                                        }
                                                                    ]
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    ]
                                },
                                "agreement": {
                                    "type": "array",
                                    "items": {
                                        "type": "object",
                                        "properties": {
                                            "engagedParty": {
                                                "type": "array",
                                                "minItems": 0,
                                                "maxItems": 1,
                                                "items": {
                                                    "type": "object",
                                                    "properties": {
                                                        "@type": {
                                                            "type": "string",
                                                            "const": "Organization"
                                                        },
                                                        "businessId": {
                                                            "description": "A business relevant identifier when different from the technical identifier documented with the .id property",
                                                            "type": "string",
                                                            "minLength": 1,
                                                            "maxLength": 40,
                                                            "example": "1234"
                                                        }
                                                    },
                                                    "required": [
                                                        "businessId"
                                                    ]
                                                }
                                            }
                                        }
                                    }
                                },
                                "externalId": {
                                    "type": "array",
                                    "contains": {
                                        "type": "object",
                                        "properties": {
                                            "externalIdentifierType": {
                                                "type": "string",
                                                "const": "externalOrderId"
                                            }
                                        }
                                    },
                                    "maxContains": 1
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "const": "new"
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOfferingQualification": {
                                        "maxItems": 1,
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/$defs/ProductOfferingQualificationRef"
                                        }
                                    },
                                    "productOrderItem": {
                                        "type": "array",
                                        "items": {
                                            "type": "object",
                                            "properties": {
                                                "action": {
                                                    "const": "add"
                                                },
                                                "product": {
                                                    "type": "object",
                                                    "required": [
                                                        "relatedPlace"
                                                    ]
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "const": "new"
                                    },
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "HvtLocalLoopProduct",
                                                                "KvzLocalLoopProduct"
                                                            ]
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "HvtLocalLoopProduct",
                                                                "KvzLocalLoopProduct"
                                                            ]
                                                        },
                                                        "relatedPlace": {
                                                            "type": "array",
                                                            "minItems": 2,
                                                            "maxItems": 2,
                                                            "allOf": [
                                                                {
                                                                    "contains": {
                                                                        "type": "object",
                                                                        "properties": {
                                                                            "role": {
                                                                                "const": "locationA"
                                                                            }
                                                                        }
                                                                    }
                                                                },
                                                                {
                                                                    "contains": {
                                                                        "type": "object",
                                                                        "properties": {
                                                                            "role": {
                                                                                "const": "locationB"
                                                                            },
                                                                            "place": {
                                                                                "type": "object",
                                                                                "properties": {
                                                                                    "@type": {
                                                                                        "const": "GeographicSite"
                                                                                    },
                                                                                    "geographicSiteCharacteristic": {
                                                                                        "type": "array",
                                                                                        "allOf": [
                                                                                            {
                                                                                                "contains": {
                                                                                                    "type": "object",
                                                                                                    "properties": {
                                                                                                        "name": {
                                                                                                            "type": "string",
                                                                                                            "const": "national_destination_code"
                                                                                                        },
                                                                                                        "value": {
                                                                                                            "type": "string",
                                                                                                            "pattern": "^[1-9][0-9]{1,4}$"
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            },
                                                                                            {
                                                                                                "contains": {
                                                                                                    "type": "object",
                                                                                                    "properties": {
                                                                                                        "name": {
                                                                                                            "type": "string",
                                                                                                            "const": "local_exchange_area"
                                                                                                        },
                                                                                                        "value": {
                                                                                                            "type": "string",
                                                                                                            "pattern": "^[1-9][0-9]{0,3}$"
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        ]
                                                                                    },
                                                                                    "place": {
                                                                                        "type": "array",
                                                                                        "minItems": 1,
                                                                                        "maxItems": 1
                                                                                    }
                                                                                },
                                                                                "required": [
                                                                                    "geographicSiteCharacteristic",
                                                                                    "place"
                                                                                ]
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            ]
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "const": "new"
                                    },
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "BitstreamAccessProduct"
                                                            ]
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "BitstreamAccessProduct"
                                                            ]
                                                        },
                                                        "relatedPlace": {
                                                            "type": "array",
                                                            "minItems": 1,
                                                            "maxItems": 1,
                                                            "contains": {
                                                                "allOf": [
                                                                    {
                                                                        "type": "object",
                                                                        "properties": {
                                                                            "role": {
                                                                                "const": "locationA"
                                                                            }
                                                                        }
                                                                    }
                                                                ]
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "const": "new"
                                    },
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "OpticalAccessLineProduct"
                                                            ]
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "OpticalAccessLineProduct"
                                                            ]
                                                        },
                                                        "relatedPlace": {
                                                            "type": "array",
                                                            "minItems": 1,
                                                            "maxItems": 2,
                                                            "contains": {
                                                                "type": "object",
                                                                "properties": {
                                                                    "role": {
                                                                        "const": "locationA"
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "terminationByBuyer",
                                            "terminationBySeller",
                                            "terminationProviderChange"
                                        ]
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOrderItem": {
                                        "allOf": [
                                            {
                                                "type": "array",
                                                "items": {
                                                    "type": "object",
                                                    "properties": {
                                                        "action": {
                                                            "const": "delete"
                                                        }
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "const": "productModification"
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOrderItem": {
                                        "oneOf": [
                                            {
                                                "allOf": [
                                                    {
                                                        "minItems": 1,
                                                        "maxItems": 1,
                                                        "type": "array",
                                                        "items": {
                                                            "$ref": "#/$defs/ProductOrderItem"
                                                        }
                                                    },
                                                    {
                                                        "type": "array",
                                                        "contains": {
                                                            "type": "object",
                                                            "properties": {
                                                                "action": {
                                                                    "const": "modify"
                                                                }
                                                            }
                                                        }
                                                    }
                                                ]
                                            },
                                            {
                                                "allOf": [
                                                    {
                                                        "minItems": 2,
                                                        "type": "array",
                                                        "items": {
                                                            "$ref": "#/$defs/ProductOrderItem"
                                                        }
                                                    },
                                                    {
                                                        "type": "array",
                                                        "contains": {
                                                            "type": "object",
                                                            "properties": {
                                                                "action": {
                                                                    "const": "nochange"
                                                                }
                                                            }
                                                        }
                                                    },
                                                    {
                                                        "type": "array",
                                                        "contains": {
                                                            "type": "object",
                                                            "properties": {
                                                                "action": {
                                                                    "enum": [
                                                                        "add",
                                                                        "delete"
                                                                    ]
                                                                }
                                                            }
                                                        }
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "const": "productModification"
                                    },
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "HvtLocalLoopProduct",
                                                                "KvzLocalLoopProduct"
                                                            ]
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOrderItem": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "product": {
                                                    "properties": {
                                                        "@type": {
                                                            "enum": [
                                                                "HvtLocalLoopProduct",
                                                                "KvzLocalLoopProduct"
                                                            ]
                                                        },
                                                        "relatedPlace": {
                                                            "type": "array",
                                                            "contains": {
                                                                "type": "object",
                                                                "properties": {
                                                                    "role": {
                                                                        "const": "locationB"
                                                                    },
                                                                    "place": {
                                                                        "type": "object",
                                                                        "properties": {
                                                                            "@type": {
                                                                                "const": "GeographicSite"
                                                                            },
                                                                            "geographicSiteCharacteristic": {
                                                                                "type": "array",
                                                                                "allOf": [
                                                                                    {
                                                                                        "contains": {
                                                                                            "type": "object",
                                                                                            "properties": {
                                                                                                "name": {
                                                                                                    "type": "string",
                                                                                                    "const": "national_destination_code"
                                                                                                },
                                                                                                "value": {
                                                                                                    "type": "string",
                                                                                                    "pattern": "^[1-9][0-9]{1,4}$"
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    },
                                                                                    {
                                                                                        "contains": {
                                                                                            "type": "object",
                                                                                            "properties": {
                                                                                                "name": {
                                                                                                    "type": "string",
                                                                                                    "const": "local_exchange_area"
                                                                                                },
                                                                                                "value": {
                                                                                                    "type": "string",
                                                                                                    "pattern": "^[1-9][0-9]{0,3}$"
                                                                                                }
                                                                                            }
                                                                                        }
                                                                                    }
                                                                                ]
                                                                            },
                                                                            "place": {
                                                                                "type": "array",
                                                                                "minItems": 1,
                                                                                "maxItems": 1
                                                                            }
                                                                        },
                                                                        "required": [
                                                                            "geographicSiteCharacteristic",
                                                                            "place"
                                                                        ]
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    },
                                                    "required": [
                                                        "relatedPlace"
                                                    ]
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "const": "portChange"
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOrderItem": {
                                        "allOf": [
                                            {
                                                "minItems": 1,
                                                "maxItems": 1,
                                                "type": "array",
                                                "items": {
                                                    "$ref": "#/$defs/ProductOrderItem"
                                                }
                                            },
                                            {
                                                "type": "array",
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "action": {
                                                            "const": "modify"
                                                        },
                                                        "product": {
                                                            "properties": {
                                                                "relatedPlace": {
                                                                    "type": "array",
                                                                    "contains": {
                                                                        "type": "object",
                                                                        "properties": {
                                                                            "role": {
                                                                                "const": "locationB"
                                                                            },
                                                                            "place": {
                                                                                "type": "object",
                                                                                "properties": {
                                                                                    "@type": {
                                                                                        "const": "GeographicSite"
                                                                                    },
                                                                                    "geographicSiteCharacteristic": {
                                                                                        "type": "array",
                                                                                        "allOf": [
                                                                                            {
                                                                                                "contains": {
                                                                                                    "type": "object",
                                                                                                    "properties": {
                                                                                                        "name": {
                                                                                                            "type": "string",
                                                                                                            "const": "national_destination_code"
                                                                                                        },
                                                                                                        "value": {
                                                                                                            "type": "string",
                                                                                                            "pattern": "^[1-9][0-9]{1,4}$"
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            },
                                                                                            {
                                                                                                "contains": {
                                                                                                    "type": "object",
                                                                                                    "properties": {
                                                                                                        "name": {
                                                                                                            "type": "string",
                                                                                                            "const": "local_exchange_area"
                                                                                                        },
                                                                                                        "value": {
                                                                                                            "type": "string",
                                                                                                            "pattern": "^[1-9][0-9]{0,3}$"
                                                                                                        }
                                                                                                    }
                                                                                                }
                                                                                            }
                                                                                        ]
                                                                                    },
                                                                                    "place": {
                                                                                        "type": "array",
                                                                                        "minItems": 1,
                                                                                        "maxItems": 1
                                                                                    }
                                                                                },
                                                                                "required": [
                                                                                    "geographicSiteCharacteristic",
                                                                                    "place"
                                                                                ]
                                                                            }
                                                                        },
                                                                        "required": [
                                                                            "role"
                                                                        ]
                                                                    }
                                                                }
                                                            },
                                                            "required": [
                                                                "relatedPlace"
                                                            ]
                                                        }
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "productChange",
                                            "technologyChange"
                                        ]
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOfferingQualification": {
                                        "maxItems": 1,
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/$defs/ProductOfferingQualificationRef"
                                        }
                                    },
                                    "productOrderItem": {
                                        "allOf": [
                                            {
                                                "minItems": 2,
                                                "type": "array",
                                                "items": {
                                                    "$ref": "#/$defs/ProductOrderItem"
                                                }
                                            },
                                            {
                                                "type": "array",
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "action": {
                                                            "const": "add"
                                                        }
                                                    }
                                                }
                                            },
                                            {
                                                "type": "array",
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "action": {
                                                            "const": "delete"
                                                        }
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "providerChange",
                                            "providerTechnologyChange"
                                        ]
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "productOfferingQualification": {
                                        "maxItems": 1,
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/$defs/ProductOfferingQualificationRef"
                                        }
                                    },
                                    "productOrderItem": {
                                        "allOf": [
                                            {
                                                "minItems": 2,
                                                "type": "array",
                                                "items": {
                                                    "$ref": "#/$defs/ProductOrderItem"
                                                }
                                            },
                                            {
                                                "type": "array",
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "action": {
                                                            "const": "add"
                                                        }
                                                    }
                                                }
                                            },
                                            {
                                                "type": "array",
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "action": {
                                                            "const": "transfer"
                                                        }
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "new",
                                            "terminationByBuyer",
                                            "productModification",
                                            "productChange",
                                            "technologyChange",
                                            "providerChange",
                                            "providerTechnologyChange",
                                            "portChange"
                                        ]
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "agreement": {
                                        "allOf": [
                                            {
                                                "type": "array",
                                                "minItems": 1,
                                                "items": {
                                                    "$ref": "#/$defs/AgreementRefOrValue"
                                                },
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "name": {
                                                            "const": "buyerServiceContract"
                                                        }
                                                    }
                                                }
                                            }
                                        ]
                                    },
                                    "relatedParty": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "role": {
                                                    "const": "orderManagementBuyerContact"
                                                }
                                            }
                                        }
                                    }
                                },
                                "required": [
                                    "agreement",
                                    "externalId"
                                ]
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "providerChange",
                                            "providerTechnologyChange",
                                            "terminationProviderChange"
                                        ]
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "agreement": {
                                        "allOf": [
                                            {
                                                "type": "array",
                                                "minItems": 1,
                                                "items": {
                                                    "$ref": "#/$defs/AgreementRefOrValue"
                                                },
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "name": {
                                                            "const": "providerChangeAgreement"
                                                        }
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                },
                                "required": [
                                    "agreement"
                                ]
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "new",
                                            "providerChange",
                                            "providerTechnologyChange"
                                        ]
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "relatedParty": {
                                        "type": "array",
                                        "contains": {
                                            "type": "object",
                                            "properties": {
                                                "role": {
                                                    "const": "locationAContact"
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        },
                        {
                            "if": {
                                "properties": {
                                    "category": {
                                        "type": "string",
                                        "enum": [
                                            "terminationProviderChange"
                                        ]
                                    }
                                }
                            },
                            "then": {
                                "properties": {
                                    "relatedParty": {
                                        "allOf": [
                                            {
                                                "type": "array",
                                                "contains": {
                                                    "type": "object",
                                                    "properties": {
                                                        "role": {
                                                            "const": "receivingProvider"
                                                        }
                                                    }
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    ],
                    "discriminator": {
                        "propertyName": "@type",
                        "mapping": {
                            "ProductOrder": "#/$defs/ProductOrder_FVO"
                        }
                    }
                }
            ]
        },
        "BillingAccountRef": {
            "description": "BillingAccount reference. A BillingAccount is a detailed description of a bill structure.",
            "type": "object",
            "example": "",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "string",
                            "description": "unique identifier",
                            "example": "5605916175",
                            "minLength": 1,
                            "maxLength": 10
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "BillingAccountRef": "#/$defs/BillingAccountRef"
                }
            }
        },
        "OrderItemActionType": {
            "description": "Action to be performed on the product:<ul>\n<li>*add*: Add product</li>\n<li>*modify*: Modify product</li>\n<li>*delete*: Delete product</li>\n<li>*nochange*: No change at main product</li>\n<li>*transfer*: Take over product</li>\n</ul>",
            "type": "string",
            "enum": [
                "add",
                "modify",
                "delete",
                "nochange",
                "transfer"
            ]
        },
        "OrderItemRelationship": {
            "description": "Used to describe relationships between order items for complex business cases (e.g. product change).",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "description": "Id of the related Order item (must be in the same Order)",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "relationshipType": {
                            "description": "Relationship type as relies on, bundles, etc...",
                            "type": "string",
                            "example": "requires"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "OrderItemRelationship": "#/$defs/OrderItemRelationship"
                }
            }
        },
        "ProductOrderRelationship": {
            "description": "The ProductOrderRelationship makes it possible to document references to other product orders. Use cases include orders on behalf of third parties and group orders.",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "properties": {
                        "relationshipType": {
                            "description": "The type of product order relationship",
                            "type": "string",
                            "example": "requires"
                        },
                        "productOrder": {
                            "description": "Product order",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOrderRefOrValue"
                            },
                            "example": []
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProductOrderRelationship": "#/$defs/ProductOrderRelationship"
                }
            }
        },
        "Product": {
            "description": "A product offering procured by a customer or other interested party playing a party role. A product is realized as one or more service(s) and / or resource(s).",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "pattern": "^(?!ProductRef$)"
                        },
                        "id": {
                            "type": "string",
                            "description": "unique identifier",
                            "minLength": 1,
                            "maxLength": 36,
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "creationDate": {
                            "description": "Date and time when the product was created",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "description": {
                            "description": "Is the description of the product. It could be copied from the description of the Product Offering.",
                            "type": "string",
                            "example": "Lorem ipsum dolor"
                        },
                        "name": {
                            "description": "Name of the product. It could be the same as the name of the product offering",
                            "type": "string",
                            "example": "Acme ludicrous speed fiber line"
                        },
                        "orderDate": {
                            "description": "Is the date when the product was ordered",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "startDate": {
                            "description": "Is the date from which the product starts",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "terminationDate": {
                            "description": "Is the date when the product was terminated",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "relatedPlace": {
                            "description": "Related place",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/RelatedPlaceRefOrValue"
                            },
                            "example": []
                        },
                        "product": {
                            "description": "Product",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductRefOrValue"
                            },
                            "example": []
                        },
                        "productCharacteristic": {
                            "description": "Product characteristic",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Characteristic"
                            },
                            "example": []
                        },
                        "productOffering": {
                            "$ref": "#/$defs/ProductOfferingRefOrValue"
                        },
                        "productRelationship": {
                            "description": "Product relationship",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductRelationship"
                            },
                            "example": []
                        },
                        "productSpecification": {
                            "$ref": "#/$defs/ProductSpecificationRef"
                        },
                        "relatedParty": {
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/RelatedPartyOrPartyRole"
                            },
                            "example": []
                        },
                        "status": {
                            "$ref": "#/$defs/ProductStatusType"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "Product": "#/$defs/Product",
                    "BitstreamAccessProduct": "#/$defs/BitstreamAccessProduct",
                    "OpticalAccessLineProduct": "#/$defs/OpticalAccessLineProduct",
                    "HvtLocalLoopProduct": "#/$defs/HvtLocalLoopProduct",
                    "KvzLocalLoopProduct": "#/$defs/KvzLocalLoopProduct"
                }
            }
        },
        "ProductOfferingQualificationRef": {
            "description": "It's a productOfferingQualification that has been executed previously",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "string",
                            "description": "unique identifier",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5",
                            "minLength": 1,
                            "maxLength": 36
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProductOfferingQualificationRef": "#/$defs/ProductOfferingQualificationRef"
                }
            }
        },
        "ProductOrder": {
            "description": "A Product Order is a type of order which  can  be used to place an order between a customer and a service provider or between a service provider and a partner and vice versa,",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "$id": "#ProductOrder",
                    "type": "object",
                    "required": [
                        "productOrderItem",
                        "category",
                        "creationDate",
                        "state",
                        "stateChangeDate"
                    ],
                    "properties": {
                        "category": {
                            "description": "Used to categorize the order from a business perspective (new, productChange, groupChange, productModification, termination, groupMigration)",
                            "type": "string",
                            "example": "new"
                        },
                        "description": {
                            "description": "Description of the product order",
                            "type": "string",
                            "example": "Lorem ipsum dolor"
                        },
                        "expectedCompletionDate": {
                            "description": "Expected delivery date amended by the provider",
                            "type": "string",
                            "format": "date-time",
                            "example": "2025-12-24T19:30:00+01:00"
                        },
                        "creationDate": {
                            "description": "Date when the order resource was created",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "orderIsChargingRelevant": {
                            "description": "Boolean amended by the provider defining if the processing of the ProductOrder is charging relevant",
                            "type": "boolean",
                            "example": false
                        },
                        "orderPostedDate": {
                            "description": "Date when the order was posted by the requester",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "priority": {
                            "description": "A way that can be used by consumers to prioritize orders in OM system (from 0 to 4 : 0 is the highest priority, and 4 the lowest)",
                            "type": "string",
                            "example": "4"
                        },
                        "requestedCompletionDate": {
                            "description": "Requested delivery date from the requestors perspective",
                            "type": "string",
                            "format": "date-time",
                            "example": "2025-12-24T19:30:00+01:00"
                        },
                        "agreement": {
                            "description": "A reference to an agreement defined in the context of the product order",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/AgreementRefOrValue"
                            },
                            "example": []
                        },
                        "externalId": {
                            "description": "A reference to an externaly defined object in the context of the product order",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ExternalIdentifier"
                            },
                            "example": []
                        },
                        "billingAccount": {
                            "$ref": "#/$defs/BillingAccountRef"
                        },
                        "note": {
                            "description": "Note",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Note"
                            },
                            "example": []
                        },
                        "productOfferingQualification": {
                            "description": "Product offering qualification",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOfferingQualificationRef"
                            },
                            "example": []
                        },
                        "productOrderItem": {
                            "description": "Product order item",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOrderItem"
                            },
                            "example": [],
                            "minItems": 1
                        },
                        "relatedParty": {
                            "description": "Related party",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/RelatedPartyOrPartyRole"
                            },
                            "example": []
                        },
                        "state": {
                            "$ref": "#/$defs/ProductOrderStateType"
                        },
                        "stateChangeDate": {
                            "description": "The date and time the state changed.",
                            "type": "string",
                            "format": "date-time",
                            "example": "2024-01-01T12:00:00+01:00"
                        },
                        "stateChangeReason": {
                            "description": "Reason for the state change described as a combination of a text and a code.",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Message"
                            },
                            "example": []
                        },
                        "stateChangeHistory": {
                            "description": "The state change history that is associated to the Entity. Populated by the server",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/StateChange"
                            },
                            "example": []
                        },
                        "earliestOrderRetry": {
                            "description": "Earliest date when the order can be submitted again.",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "attachment": {
                            "description": "Attachment",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/AttachmentRefOrValue"
                            },
                            "example": []
                        },
                        "productOrderJeopardyAlert": {
                            "description": "List of ProductOrderJeopardyAlerts. A ProductOrderJeopardyAlert represents a predicted exception during a product order processing that would brings risk to complete successfully the order.",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOrderJeopardyAlert"
                            },
                            "example": []
                        },
                        "productOrderMilestone": {
                            "description": "List of ProductOrderMilestones. A ProductOrderMilestone represents an action or event marking a significant change or stage in processing of a product order.",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOrderMilestone"
                            },
                            "example": []
                        },
                        "productOrderRelationship": {
                            "description": "Product order relationship",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ProductOrderRelationship"
                            },
                            "example": []
                        },
                        "providerChangeInfo": {
                            "$ref": "#/$defs/ProviderChangeInfo"
                        },
                        "additionalOrderInformation": {
                            "$ref": "#/$defs/AdditionalOrderInformation"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProductOrder": "#/$defs/ProductOrder"
                }
            }
        },
        "ProductOrderItem": {
            "description": "An identified part of the order. A product order is decomposed into one or more order items.",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "action",
                        "id"
                    ],
                    "properties": {
                        "id": {
                            "description": "Identifier of the ProductOrder item (generally it is a sequence number 01, 02, 03,...)",
                            "type": "string",
                            "example": "01"
                        },
                        "action": {
                            "$ref": "#/$defs/OrderItemActionType"
                        },
                        "billingAccount": {
                            "$ref": "#/$defs/BillingAccountRef"
                        },
                        "product": {
                            "$ref": "#/$defs/ProductRefOrValue"
                        },
                        "productOffering": {
                            "$ref": "#/$defs/ProductOfferingRefOrValue"
                        },
                        "alternateProductOffering": {
                            "$ref": "#/$defs/ProductOfferingRefOrValue"
                        },
                        "productOrderItemRelationship": {
                            "description": "Product order item relationship",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/OrderItemRelationship"
                            },
                            "example": []
                        },
                        "productOfferingQualificationItem": {
                            "$ref": "#/$defs/ProductOfferingQualificationItemRef"
                        },
                        "endUserAppointmentIsNecessary": {
                            "description": "Defines if an end user appointment is required for this order item",
                            "type": "boolean",
                            "example": false
                        },
                        "requestedTimeSlot": {
                            "$ref": "#/$defs/TimeSlot"
                        },
                        "appointment": {
                            "$ref": "#/$defs/AppointmentRefOrValue"
                        }
                    },
                    "allOf": [
                        {
                            "if": {
                                "properties": {
                                    "action": {
                                        "const": "add"
                                    }
                                }
                            },
                            "then": {
                                "required": [
                                    "productOffering"
                                ]
                            }
                        },
                        {
                            "anyOf": [
                                {
                                    "required": [
                                        "product"
                                    ]
                                },
                                {
                                    "required": [
                                        "productOffering"
                                    ]
                                }
                            ]
                        }
                    ]
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProductOrderItem": "#/$defs/ProductOrderItem"
                }
            }
        },
        "ProductOfferingQualificationItemRef": {
            "description": "It's a productOfferingQualification item that has been executed previously",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "productOfferingQualificationName": {
                            "description": "Name of the related entity.",
                            "type": "string",
                            "example": "n/a"
                        },
                        "productOfferingQualificationHref": {
                            "description": "Reference of the related entity.",
                            "type": "string",
                            "example": "n/a"
                        },
                        "@referredType": {
                            "description": "The actual type of the target instance when needed for disambiguation.",
                            "type": "string",
                            "example": "n/a"
                        },
                        "productOfferingQualificationId": {
                            "description": "Unique identifier of a related entity.",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "itemId": {
                            "description": "Id of an item of a product offering qualification",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        }
                    }
                }
            ]
        },
        "ProductOrderStateType": {
            "description": "Possible values for the state of the order:<ul>\n<li>*acknowledged*: The Acknowledged state is where an order/item has been received and has passed message level validation (e. g. schema, conformance profile). The order is stored and addressable.</li>\n<li>*accepted*: The Accepted state is where an order has passed business validation. Several operations, e. g. storno, are possible.</li>\n<li>*rejected*: The Rejected state is where:<br/>\n  - An order failed the Order Feasibility check<br/>\n  - Invalid information is provided through the order request<br/>\n  - The order request fails to meet business rules for ordering<br/>\n  Same rules applied for order item.</li>\n<li>*pending*: The Pending state is used when an order/item is currently in a waiting stage for an action/activity to be completed before the order/item can progress further, pending order amend or cancel assessment. In situations where Access Seeker action is required, an “information required” notification will be issued on transition into this state.\n    A pending stage can lead into auto cancellation of an order/item, if no action is taken within the defined timeframes to be described under the Agreement.</li>\n<li>*inProgress*: The In Progress state is where an order Item has passed the Order Feasibility check successfully and product delivery has started.\n  For the order at least one order item is inProgress.</li>\n<li>*held*: The Held state is used when an order/item cannot be progressed due to an issue. SP has temporarily delayed completing an order/item to resolve an infrastructure shortfall to facilitate supply of order. Upon resolution of the issue, the order/item will continue to progress.</li>\n<li>*assessingCancellation*: Following a cancel request, the SP is assessing if cancel can be done for the order/item (or if the PO has reached PONR). If cancellation request is not accepted after assessment the order will return to Held or Pending or InProgress state.</li>\n<li>*cancelled*: The Cancelled state is where an In-Flight Order/item has been successfully cancelled.</li>\n<li>*completed*: The Completed state is where an item has complete provision and the service is now active.\n    For an order all order items are completed.</li>\n<li>*closed*: The post-provisioning activities such as billing account update have been finalized. The order is Closed.</li>\n<li>*failed*: Order item as not a successful delivery completion. The product is not delivered and the order item failed.\n  All Order items have failed which results in the entire Order has Failed.</li></ul>",
            "type": "string",
            "enum": [
                "acknowledged",
                "accepted",
                "rejected",
                "pending",
                "inProgress",
                "held",
                "assessingCancellation",
                "cancelled",
                "completed",
                "closed",
                "failed"
            ]
        },
        "ProductOrderRef": {
            "description": "ProductOrder (ProductOrder). The product order which the action is related with.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                }
            ]
        },
        "ProductOrderRefOrValue": {
            "description": "Product reference or value",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "oneOf": [
                {
                    "$ref": "#/$defs/ProductOrderRef"
                },
                {
                    "$ref": "#/$defs/ProductOrder"
                }
            ]
        },
        "ProductRef": {
            "description": "Product reference",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "ProductRef"
                            ]
                        }
                    }
                }
            ]
        },
        "ProductRefOrValue": {
            "description": "A product to be created defined by value or existing defined by reference.",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "required": [
                "@type"
            ],
            "oneOf": [
                {
                    "$ref": "#/$defs/ProductRef"
                },
                {
                    "$ref": "#/$defs/Product"
                }
            ]
        },
        "ProductRelationship": {
            "description": "Used to describe relationship between product.",
            "type": "object",
            "properties": {
                "relationshipType": {
                    "description": "Relationship type as relies on, bundles, etc...",
                    "type": "string",
                    "example": "requires"
                }
            },
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProductRelationship": "#/$defs/ProductRelationship"
                }
            }
        },
        "ProductStatusType": {
            "description": "Possible values for the status of the product:<ul>\n<li>*created*: Product created</li>\n<li>*pendingActive*: Product pending active</li>\n<li>*cancelled*: Product cancelled</li>\n<li>*active*: Product active</li>\n<li>*pendingTerminate*: Product pendingTerminate</li>\n<li>*terminated*: Product terminated</li>\n<li>*suspended*: Product suspended</li>\n<li>*aborted*: Product aborted</li>\n</ul>",
            "type": "string",
            "enum": [
                "created",
                "pendingActive",
                "cancelled",
                "active",
                "pendingTerminate",
                "terminated",
                "suspended",
                "aborted"
            ]
        },
        "BitstreamAccessProduct": {
            "description": "Bitstream access product",
            "allOf": [
                {
                    "$ref": "#/$defs/Product"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "BitstreamAccessProduct"
                            ]
                        },
                        "accessTechnology": {
                            "description": "Defines the type of connectivity (e.g. FTTH, FTTB, FTTC, HFC, Coax, TAL, OAL)",
                            "type": "string",
                            "example": "FTTH"
                        },
                        "accessProtocol": {
                            "description": "Defines the type and technology of the access (e.g. \tEthernet, P2P, GPON, XGS-PON, VDSL, GFAST-CuDa., GFAST-Coax, DOCSIS, ADSL, SDSL, ...)",
                            "type": "string",
                            "example": "VDSL"
                        },
                        "upstreamNominalBandwidth": {
                            "description": "Defines the upstream access bandwidth (e.g. 100 Mbit/s , 1 Gbit/s, 100 kbit/s)",
                            "$ref": "#/$defs/Quantity"
                        },
                        "downstreamNominalBandwidth": {
                            "description": "Defines the downstream access bandwidth (e.g. 400 Mbit/s , 1 Gbit/s )",
                            "$ref": "#/$defs/Quantity"
                        },
                        "trafficHandOver": {
                            "description": "Defines how the traffic is handed over to the reseller (e.g. L2, L3, LT)",
                            "type": "string",
                            "example": "L2"
                        },
                        "trafficAggregation": {
                            "description": "Defines the aggregation provided by the supplier hand over close to customer, in a region  or one central hand over for the complete country (e.g. local, regional, national)",
                            "type": "string",
                            "example": "local"
                        },
                        "networkTerminationUnitType": {
                            "description": "Defines the type of the access termination (e.g. withOnt, withoutOnt)",
                            "type": "string",
                            "example": "withOnt"
                        },
                        "uniConnectorType": {
                            "description": "Defines the interface of the access termination (e.g. TAE, RJ45, E2000, LC-APC, MMD (Multi Media Dose → Koaxialdose, F-Stecker) ...)",
                            "type": "string",
                            "example": "RJ45"
                        },
                        "reversePowering": {
                            "description": "Defines if the DSLAM needs to be reverse powered (e.g. yes, no)",
                            "type": "string",
                            "example": "yes"
                        },
                        "leadTime": {
                            "description": "Defines the typical lead time for provisioning an access",
                            "$ref": "#/$defs/Duration"
                        },
                        "lineID": {
                            "description": "Defines the identifier of the access line. If ProductId is not known for change orders, the contract number of the product to be changed / terminated can be entered here by the buyer",
                            "type": "string"
                        },
                        "virtualAccessLineId": {
                            "description": "Line-Identifier for the end customer",
                            "type": "string"
                        },
                        "enni": {
                            "description": "Identifies the point of traffic interconnection external network to network interconnection (e.g. value or location of A10NSP)",
                            "type": "string"
                        },
                        "enniPort": {
                            "description": "Defines the configured port",
                            "type": "string",
                            "example": "n/a"
                        },
                        "cvlan": {
                            "description": "Defines the configured C-VLAN",
                            "type": "string",
                            "example": "n/a"
                        },
                        "svlan": {
                            "description": "Defines the configured S-VLAN",
                            "type": "string"
                        },
                        "networkTerminationUnitLocation": {
                            "description": "Describes the location of the network termination (e.g. describes the position of TAE/GF-TA or ONT)",
                            "type": "string"
                        },
                        "homeId": {
                            "description": "Identifies the GF-TA unit at the end user's premise.",
                            "type": "string",
                            "example": "a12d5a4545"
                        },
                        "ontSerialNumber": {
                            "description": "Serial number of the ONT",
                            "type": "string",
                            "example": "1515515155115"
                        },
                        "trafficLimitationUpstream": {
                            "description": "Defines the traffic/Speedlimit of bandwith",
                            "$ref": "#/$defs/Quantity"
                        },
                        "trafficLimitationDownstream": {
                            "description": "Defines the traffic/Speedlimit of bandwith",
                            "$ref": "#/$defs/Quantity"
                        },
                        "singleContractIdExistingProduct": {
                            "description": "If ProductId is not known for change orders, the contract number of the product to be changed / canceled can be entered here",
                            "type": "string",
                            "example": "3072576895"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "BitstreamAccessProduct": "#/$defs/BitstreamAccessProduct"
                }
            }
        },
        "OpticalAccessLineProduct": {
            "description": "Optical access line product",
            "allOf": [
                {
                    "$ref": "#/$defs/Product"
                },
                {
                    "type": "object",
                    "required": [
                        "patchService"
                    ],
                    "properties": {
                        "patchService": {
                            "description": "Entity connecting active and passive port",
                            "$ref": "#/$defs/PatchServiceType"
                        },
                        "passiveAccessLineId": {
                            "description": "Technical identifier for the fibtre optical cable - starting at the ODF to the customers house - homeId",
                            "type": "string",
                            "example": "DEU.DGW.G465157FDU"
                        },
                        "ontType": {
                            "description": "Type of ONT",
                            "type": "string",
                            "example": "9000"
                        },
                        "ontActivationCode": {
                            "description": "Code required to activate an ONT at this connection, has to be provided by the NGA and used only if the ANE offers a service to deliver the ONT to the end-customer.",
                            "type": "string",
                            "example": "Aalskdg78q"
                        },
                        "ontSerialNumber": {
                            "description": "Serial number of ONT",
                            "type": "string",
                            "example": "ALCL:F8ADCACF"
                        },
                        "oltName": {
                            "description": "Name of the OLT the fibre shall be/is connected to.",
                            "type": "string",
                            "example": "dtm4711-access6"
                        },
                        "oltPort": {
                            "description": "Port of the OLT the fibre shall be/is connected to.",
                            "type": "string",
                            "example": "3/7/15"
                        },
                        "splitterName": {
                            "description": "Name of the splitter",
                            "type": "string",
                            "example": "bch1743-NVT7-MUX34"
                        },
                        "splitterPort": {
                            "description": "Port on the splitter the fibre is connected to may be provided by the NGA or ANE depending on set-up of the project",
                            "type": "string",
                            "example": "27"
                        },
                        "switchingDataNga": {
                            "description": "Data provided by the NGA (owner of the active network) about the active fibre optical connection. Defines the location of the fibre in the POP.",
                            "$ref": "#/$defs/SwitchingDataOal"
                        },
                        "switchingDataAne": {
                            "description": "Data provided by the ANE (owner of the passive network) about the passive fibre optical connection. Defines the location of the fibre in the POP.",
                            "$ref": "#/$defs/SwitchingDataOal"
                        },
                        "ontProvidedBy": {
                            "description": "Provider of the ONT (e.g. Buyer, Seller)",
                            "example": "Buyer"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "OpticalAccessLineProduct": "#/$defs/OpticalAccessLineProduct"
                }
            }
        },
        "PatchServiceType": {
            "description": "Possible values are:<ul>\n<li>*partner*</li>\n<li>*supplier*</li>\n</ul>",
            "type": "string",
            "enum": [
                "partner",
                "supplier"
            ]
        },
        "SwitchingDataOal": {
            "description": "Switching data optical access line",
            "type": "object",
            "properties": {
                "room": {
                    "description": "Room the ODF is located",
                    "type": "string",
                    "example": "A"
                },
                "rack": {
                    "description": "Rack the ODF is located",
                    "type": "string",
                    "example": "1"
                },
                "shelf": {
                    "description": "Shelf in the rack",
                    "type": "string",
                    "example": "3"
                },
                "slot": {
                    "description": "Slot in the shelf",
                    "type": "string",
                    "example": "5"
                },
                "port": {
                    "description": "Port in the slot",
                    "type": "string",
                    "example": "SPL-410688-05-B-2-32"
                },
                "ppid": {
                    "description": "PortId",
                    "type": "string",
                    "example": "000SP50"
                }
            }
        },
        "HvtLocalLoopProduct": {
            "description": "Local loop from the central office",
            "allOf": [
                {
                    "$ref": "#/$defs/LocalLoopProduct"
                },
                {
                    "type": "object",
                    "properties": {
                        "switchingDataHvt": {
                            "description": "Switiching data for the Local loop from the central office",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/SwitchingDataHvt"
                            },
                            "example": [],
                            "maxItems": 2,
                            "minItems": 1
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "HvtLocalLoopProduct": "#/$defs/HvtLocalLoopProduct"
                }
            }
        },
        "KvzLocalLoopProduct": {
            "description": "Local loop from the curb",
            "allOf": [
                {
                    "$ref": "#/$defs/LocalLoopProduct"
                },
                {
                    "type": "object",
                    "properties": {
                        "switchingDataKvz": {
                            "description": "Switching data for the Local loop from the curb",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/SwitchingDataKvz"
                            },
                            "example": [],
                            "maxItems": 2,
                            "minItems": 1
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "KvzLocalLoopProduct": "#/$defs/KvzLocalLoopProduct"
                }
            }
        },
        "LocalLoopProduct": {
            "description": "Local loop product",
            "allOf": [
                {
                    "$ref": "#/$defs/Product"
                },
                {
                    "type": "object",
                    "properties": {
                        "transmissionMethod": {
                            "description": "Transmission method",
                            "type": "string",
                            "example": "H01"
                        },
                        "loopResistance": {
                            "description": "Total resistance (unit: ohms) of the loop",
                            "type": "string",
                            "example": "<1200"
                        },
                        "maxGrossBitrate": {
                            "description": "Max. gross bit rate in kbit/s",
                            "type": "string",
                            "example": "9000"
                        },
                        "singleContractIdExistingProduct": {
                            "description": "If ProductId is not known for change orders, the contract number of the product to be changed / canceled can be entered here",
                            "type": "string",
                            "example": "3072345760"
                        },
                        "accessLine": {
                            "$ref": "#/$defs/AccessLine"
                        },
                        "lineSegment": {
                            "description": "Line segment",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/LineSegment"
                            },
                            "example": [],
                            "maxItems": 99
                        },
                        "access": {
                            "$ref": "#/$defs/Access"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "LocalLoopProduct": "#/$defs/LocalLoopProduct"
                }
            }
        },
        "AccessLine": {
            "description": "Access line for the local loop",
            "type": "object",
            "properties": {
                "lineKey": {
                    "description": "Indicates the type of line",
                    "type": "string",
                    "example": "96W"
                },
                "areaCodeA": {
                    "description": "The area code of location A",
                    "type": "string",
                    "example": "228"
                },
                "areaCodeB": {
                    "description": "The area code of location B",
                    "type": "string",
                    "example": "228"
                },
                "talSequenceNumber": {
                    "description": "Consecutive number to identify the line",
                    "type": "string",
                    "example": "FXP00WZTRH"
                }
            },
            "required": [
                "lineKey",
                "areaCodeA",
                "areaCodeB",
                "talSequenceNumber"
            ]
        },
        "LineSegment": {
            "description": "Line segment",
            "type": "object",
            "properties": {
                "id": {
                    "description": "Consecutive number to identify the line section",
                    "type": "string",
                    "example": "1"
                },
                "length": {
                    "description": "Length (unit: meter) of the line section",
                    "type": "string",
                    "example": "441"
                },
                "diameter": {
                    "description": "Diameter of the line section",
                    "type": "string",
                    "example": "500"
                }
            },
            "required": [
                "id",
                "length",
                "diameter"
            ]
        },
        "Access": {
            "description": "Notes on the commissioned connection",
            "type": "object",
            "properties": {
                "areaCode": {
                    "description": "Area code of the previous connection (when changing provider)",
                    "type": "string",
                    "example": "228"
                },
                "subscriberNumber": {
                    "description": "Phone number of the previous connection (when changing provider)",
                    "type": "string",
                    "example": "123456"
                }
            },
            "required": [
                "areaCode",
                "subscriberNumber"
            ]
        },
        "SwitchingDataKvz": {
            "description": "Switching data for the Local loop from the curb",
            "type": "object",
            "properties": {
                "kvzId": {
                    "description": "Unique identifier of the cable distributor",
                    "type": "string",
                    "example": "20"
                },
                "kvzSwitchingId": {
                    "description": "Information from the carrier regarding its switching data",
                    "type": "string",
                    "example": "285"
                }
            },
            "required": [
                "kvzId",
                "kvzSwitchingId"
            ]
        },
        "SwitchingDataHvt": {
            "description": "Switching data for the Local loop from the central office",
            "type": "object",
            "properties": {
                "uevt": {
                    "description": "Number of  the \"Übergabeverteiler\"",
                    "type": "string",
                    "example": "0203"
                },
                "evs": {
                    "description": "Number of  the \"Endverschluss\"",
                    "type": "string",
                    "example": "24"
                },
                "copperPairId": {
                    "description": "Number of  the twisted pair",
                    "type": "string",
                    "example": "43"
                }
            },
            "required": [
                "uevt",
                "evs",
                "copperPairId"
            ]
        },
        "ProductOrderMilestone": {
            "description": "A ProductOrderMilestone represents an action or event marking a significant change or stage in processing of a product order.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/Milestone"
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProductOrderMilestone": "#/$defs/ProductOrderMilestone"
                }
            }
        },
        "ProductOrderJeopardyAlert": {
            "description": "A ProductOrderJeopardyAlert represents a predicted exception during a product order processing that would brings risk to complete successfully the order.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/JeopardyAlert"
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProductOrderJeopardyAlert": "#/$defs/ProductOrderJeopardyAlert"
                }
            }
        },
        "ProviderChangeInfo": {
            "description": "Additional provider change information for terminating provider",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "respondTime": {
                            "description": "Latest time the response to the provider change request must have been submitted",
                            "type": "string",
                            "format": "date-time",
                            "example": "2025-12-24T19:30:00+01:00"
                        },
                        "approval": {
                            "description": "State of the provider change approval",
                            "type": "boolean",
                            "example": true
                        },
                        "responseReason": {
                            "$ref": "#/$defs/Message"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "ProviderChangeInfo": "#/$defs/ProviderChangeInfo"
                }
            }
        },
        "ProductOrderItemId": {
            "description": "Defines the rescheduled product order item",
            "type": "object",
            "properties": {
                "id": {
                    "description": "Identifier of the rescheduled product order item",
                    "type": "string",
                    "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                },
                "appointment": {
                    "$ref": "#/$defs/AppointmentRefOrValue"
                },
                "requestedTimeSlot": {
                    "$ref": "#/$defs/TimeSlot"
                }
            }
        },
        "AdditionalOrderInformation": {
            "description": "Defines additional order information",
            "type": "object",
            "properties": {
                "providerChangeAgreementTechnology": {
                    "description": "Technology of the old product (only for Provider Change Use Cases)",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "providerChangeAgreementLineId": {
                    "description": "LineId of the old product (only for Provider Change Use Cases)",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "providerChangeAgreementSingleContractId": {
                    "description": "Single Contract Id of the old product (only for Provider Change Use Cases)",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10,
                    "example": "n/a"
                },
                "providerChangePassiveAccessLineId": {
                    "description": "Single Contract Id of the old product (only for Provider Change Use Cases)",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "previousTenantGivenName": {
                    "description": "Given Name of the previous tenant",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "previousTenantFamilyName": {
                    "description": "Family Name of the previous tenant",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "previousTenantNationalDestinationCode": {
                    "description": "National destination code of the previous tenant",
                    "type": "string",
                    "pattern": "^[1-9][0-9]{1,4}$",
                    "example": "n/a"
                },
                "previousTenantSubscriberNumber": {
                    "description": "Subscriber nuber of the previous tenant",
                    "type": "string",
                    "pattern": "^[0-9]{2,14}$",
                    "example": "n/a"
                },
                "campaignIdentifier": {
                    "description": "Identifier for marketing campaigns, e. g. promotions",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "Identifier for marketing campaigns, e. g. promotions"
                },
                "projectIdentifier": {
                    "description": "Identifier for specific projects",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "couplingIdentifier": {
                    "description": "Identifier for specific projects",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "orderBindingId": {
                    "description": "Identifier used to bind orders",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10,
                    "example": "n/a"
                },
                "orderBindingNumberOfOrders": {
                    "description": "Number of orders (used together with orderBindingId)",
                    "type": "integer",
                    "example": 2
                },
                "orderBindingFailedExternalOrderId": {
                    "description": "Failed order number (refers to another failed order)",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "copperPairInUseLineKey": {
                    "description": "LineKey of the copper pair in Use",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "copperPairInUseNationalDestinationCodeA": {
                    "description": "NationalDestinationCodeA of the copper pair in Use",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "copperPairInUseNationalDestinationCodeB": {
                    "description": "NationalDestinationCodeB of the copper pair in Use",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "copperPairInUseTalSequenceNumber": {
                    "description": "TalSequenceNumber of the copper pair in Use",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "hardwareIdType": {
                    "description": "HardwareId to identify the line: type (e.g. OntSerialNuber)",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "example": "n/a"
                },
                "hardwareIdValue": {
                    "description": "HardwareId to identify the line: value",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "aggregatorProductOffering": {
                    "description": "Name of pre product",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "aggregatorNGA": {
                    "description": "Seller name of pre product",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "aggregatorOrderAction": {
                    "description": "Order category of pre product",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                },
                "aggregatorOrderId": {
                    "description": "Order id of pre product",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30,
                    "example": "n/a"
                }
            }
        },
        "Extensible": {
            "description": "Base Extensible schema for use in TMForum Open-APIs - When used for in a schema it means that the Entity described by the schema  MUST be extended with the @type",
            "type": "object",
            "properties": {
                "@type": {
                    "description": "When sub-classing, this defines the sub-class Extensible name",
                    "type": "string",
                    "example": ""
                },
                "@baseType": {
                    "description": "When sub-classing, this defines the super-class",
                    "type": "string",
                    "example": ""
                },
                "@schemaLocation": {
                    "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
                    "type": "string",
                    "example": ""
                }
            },
            "discriminator": {
                "propertyName": "@type"
            },
            "required": [
                "@type"
            ]
        },
        "Entity": {
            "description": "Base entity schema for use in TMForum Open-APIs. Property.",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "description": "Unique identifier",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "href": {
                            "description": "Hyperlink reference",
                            "type": "string",
                            "format": "uri",
                            "minLength": 1,
                            "maxLength": 2048,
                            "example": "https://example.org/resource/id"
                        }
                    }
                }
            ]
        },
        "ContactMedium": {
            "description": "Indicates the contact medium that could be used to contact the party.",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "contactMediumIdentifier": {
                            "description": "Identifier for this contact medium.",
                            "type": "string",
                            "example": "123"
                        },
                        "contactType": {
                            "description": "Type of the contact medium to qualifiy it like pro email / personal email. This is not used to define the contact medium used.",
                            "type": "string",
                            "example": "personal email"
                        },
                        "preferred": {
                            "description": "If true, indicates that is the preferred contact medium",
                            "type": "boolean",
                            "example": true
                        },
                        "validFor": {
                            "$ref": "#/$defs/TimePeriod"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "PhoneContactMedium": "#/$defs/PhoneContactMedium",
                    "EmailContactMedium": "#/$defs/EmailContactMedium",
                    "PostalAddressContactMedium": "#/$defs/PostalAddressContactMedium"
                }
            }
        },
        "PhoneContactMedium": {
            "description": "Describes a phone number that could be used to contact a party (an individual or an organization).",
            "allOf": [
                {
                    "$ref": "#/$defs/ContactMedium"
                },
                {
                    "type": "object",
                    "properties": {
                        "phoneNumber": {
                            "description": "The phone number of the contact",
                            "type": "string",
                            "example": "+49 30 1234567"
                        }
                    }
                }
            ]
        },
        "EmailContactMedium": {
            "description": "Describes a email that could be used to contact a party (an individual or an organization).",
            "allOf": [
                {
                    "$ref": "#/$defs/ContactMedium"
                },
                {
                    "type": "object",
                    "properties": {
                        "emailAddress": {
                            "description": "Full email address in standard format",
                            "type": "string",
                            "example": "info@example.net"
                        }
                    }
                }
            ]
        },
        "PostalAddressContactMedium": {
            "description": "Describes a email that could be used to contact a party (an individual or an organization).",
            "allOf": [
                {
                    "$ref": "#/$defs/ContactMedium"
                },
                {
                    "type": "object",
                    "properties": {
                        "city": {
                            "description": "Full city name",
                            "type": "string",
                            "example": "Berlin"
                        },
                        "country": {
                            "description": "Country that the address is in (ISO-3166-1 ALPHA-2)",
                            "type": "string",
                            "example": "DE"
                        },
                        "locality": {
                            "description": "Locality",
                            "type": "string",
                            "example": ""
                        },
                        "postcode": {
                            "description": "Postcode",
                            "type": "string",
                            "example": 10117
                        },
                        "streetName": {
                            "description": "StreetName",
                            "type": "string",
                            "example": "Reinhardtstr."
                        },
                        "streetNr": {
                            "description": "StreetNr",
                            "type": "string",
                            "example": 31
                        },
                        "streetNrSuffix": {
                            "description": "StreetNrSuffix",
                            "type": "string",
                            "example": ""
                        }
                    }
                }
            ]
        },
        "TimePeriod": {
            "description": "A period of time, either as a deadline (endDateTime only) a startDateTime only, or both",
            "type": "object",
            "properties": {
                "startDateTime": {
                    "description": "Start of the time period, using IETC-RFC-3339 format. If you define a start, you must also define an end",
                    "type": "string",
                    "format": "date-time",
                    "example": "2023-01-01T08:00:00+01:00"
                },
                "endDateTime": {
                    "description": "End of the time period, using IETC-RFC-3339 format",
                    "type": "string",
                    "format": "date-time",
                    "example": "2025-12-24T19:30:00+01:00"
                }
            }
        },
        "ExternalIdentifier": {
            "description": "An identification of an entity that is owned by or originates in a software system different from the current system, for example a ProductOrder handed off from a commerce platform into an order handling system. The structure identifies the system itself, the nature of the entity within the system (e.g. class name) and the unique ID of the entity within the system. It is anticipated that multiple external IDs can be held for a single entity, e.g. if the entity passed through multiple systems on the way to the current system. In this case the consumer is expected to sequence the IDs in the array in reverse order of provenance, i.e. most recent system first in the list.",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "description": "Unique identifier",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 20,
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "href": {
                            "description": "Hyperlink reference",
                            "type": "string",
                            "format": "uri",
                            "example": "https://example.org/resource/id"
                        },
                        "externalIdentifierType": {
                            "description": "Type of the identification, typically would be the type of the entity within the external system",
                            "type": "string",
                            "const": "externalOrderId",
                            "example": "externalOrderId"
                        },
                        "owner": {
                            "description": "Name of the external system that owns the entity.",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "example": "AcmeCommerce"
                        }
                    },
                    "required": [
                        "externalIdentifierType",
                        "id"
                    ]
                }
            ]
        },
        "Characteristic": {
            "description": "Describes a given characteristic of an object or entity through a name/value pair.",
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "Characteristic": "#/$defs/Characteristic",
                    "StringCharacteristic": "#/$defs/StringCharacteristic",
                    "StringArrayCharacteristic": "#/$defs/StringArrayCharacteristic",
                    "ObjectCharacteristic": "#/$defs/ObjectCharacteristic",
                    "ObjectArrayCharacteristic": "#/$defs/ObjectArrayCharacteristic",
                    "NumberCharacteristic": "#/$defs/NumberCharacteristic",
                    "NumberArrayCharacteristic": "#/$defs/NumberArrayCharacteristic",
                    "IntegerCharacteristic": "#/$defs/IntegerCharacteristic",
                    "IntegerArrayCharacteristic": "#/$defs/IntegerArrayCharacteristic",
                    "BooleanCharacteristic": "#/$defs/BooleanCharacteristic",
                    "BooleanArrayCharacteristic": "#/$defs/BooleanArrayCharacteristic"
                }
            },
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "string",
                            "description": "Unique identifier of the characteristic"
                        },
                        "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40,
                            "description": "Name of the characteristic"
                        },
                        "valueType": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40,
                            "description": "Data type of the value of the characteristic"
                        }
                    }
                }
            ]
        },
        "StringCharacteristic": {
            "description": "A characteristic which value is a String.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "required": [
                        "value"
                    ],
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160
                        }
                    }
                }
            ]
        },
        "StringArrayCharacteristic": {
            "description": "A characteristic which value is a String.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "array",
                            "items": {
                                "type": "string"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "ObjectCharacteristic": {
            "description": "A characteristic which value is an Object.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "required": [
                        "value"
                    ],
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "object",
                            "example": ""
                        }
                    }
                }
            ]
        },
        "ObjectArrayCharacteristic": {
            "description": "A characteristic which value is an Object.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "array",
                            "items": {
                                "type": "object"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "NumberCharacteristic": {
            "description": "A characteristic which value is a Number.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "required": [
                        "value"
                    ],
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "number",
                            "example": 1
                        }
                    }
                }
            ]
        },
        "NumberArrayCharacteristic": {
            "description": "A characteristic which value is a Number.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "array",
                            "items": {
                                "type": "number"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "IntegerCharacteristic": {
            "description": "A characteristic which value is an Integer.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "required": [
                        "value"
                    ],
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "integer",
                            "example": 1
                        }
                    }
                }
            ]
        },
        "IntegerArrayCharacteristic": {
            "description": "A characteristic which value is an Integer.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "array",
                            "items": {
                                "type": "integer"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "BooleanCharacteristic": {
            "description": "A characteristic which value is a Boolean.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "required": [
                        "value"
                    ],
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "boolean",
                            "example": true
                        }
                    }
                }
            ]
        },
        "BooleanArrayCharacteristic": {
            "description": "A characteristic which value is a Boolean.",
            "allOf": [
                {
                    "$ref": "#/$defs/Characteristic"
                },
                {
                    "type": "object",
                    "properties": {
                        "value": {
                            "description": "Value of the characteristic",
                            "type": "array",
                            "items": {
                                "type": "boolean"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "Party": {
            "description": "Generic Party structure used to define commonalities between sub concepts of Individual and Organization.",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "properties": {
                        "contactMedium": {
                            "description": "List of means for contacting the party, e.g. mobile phone, email address",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ContactMedium"
                            },
                            "example": []
                        },
                        "externalReference": {
                            "description": "List of identifiers of the Party in an external system, for example when party information is imported from a commerce system",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ExternalIdentifier"
                            },
                            "example": []
                        },
                        "businessId": {
                            "description": "A business relevant identifier when different from the technical identifier documented with the .id property",
                            "type": "string",
                            "example": "1234"
                        },
                        "partyCharacteristic": {
                            "description": "List of additional characteristics that a Party can take on.",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Characteristic"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "Individual": {
            "description": "Individual represents a single human being (a man, woman or child). The individual can be a customer, an employee or any other person that the organization needs to store information about.",
            "allOf": [
                {
                    "$ref": "#/$defs/Party"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "Individual"
                            ]
                        },
                        "familyName": {
                            "description": "Contains the non-chosen or inherited name. Also known as last name in the Western context",
                            "type": "string",
                            "example": "Muster"
                        },
                        "salutation": {
                            "description": "Standard wording used to address an individual",
                            "type": "string",
                            "example": "Ms"
                        },
                        "givenName": {
                            "description": "First name of the individual",
                            "type": "string",
                            "example": "Melanie"
                        },
                        "title": {
                            "description": "Useful for titles (aristocratic, social,...) Pr, Dr, Sir, ...",
                            "type": "string",
                            "example": "Dr."
                        }
                    }
                }
            ]
        },
        "Organization": {
            "description": "Organization represents a group of people identified by shared interests or purpose. Examples include business, department and enterprise. Because of the complex nature of many businesses, both organizations and organization units are represented by the same data.",
            "allOf": [
                {
                    "$ref": "#/$defs/Party"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "Organization"
                            ]
                        },
                        "name": {
                            "description": "Organization name (department name for example)",
                            "type": "string",
                            "example": "Acme Corp."
                        }
                    }
                }
            ]
        },
        "EntityRef": {
            "description": "Entity reference schema to be use for all entityRef class.",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "id"
                    ],
                    "properties": {
                        "id": {
                            "description": "Identifier of the referred entity.",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "href": {
                            "description": "Hyperlink reference",
                            "type": "string",
                            "format": "uri",
                            "example": "https://api.example.org/resource/id"
                        },
                        "name": {
                            "description": "Name of the referred entity.",
                            "type": "string",
                            "example": "EntityName"
                        },
                        "@referredType": {
                            "description": "The actual type of the target instance when needed for disambiguation.",
                            "type": "string",
                            "example": ""
                        }
                    }
                }
            ]
        },
        "PartyRef": {
            "description": "Party reference.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "PartyRef"
                            ]
                        }
                    }
                }
            ]
        },
        "PartyRoleRef": {
            "description": "Party role reference.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "PartyRoleRef"
                            ]
                        }
                    }
                }
            ]
        },
        "AccountRef": {
            "description": "Account reference. A account may be a party account or a financial account.",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "description": {
                            "description": "Detailed description of the account",
                            "type": "string",
                            "example": "lorem ipsum dolor"
                        }
                    }
                }
            ]
        },
        "AgreementRef": {
            "description": "Agreement reference. An agreement represents a contract or arrangement, either written or verbal and sometimes enforceable by law, such as a service level agreement or a customer price agreement. An agreement involves a number of other business entities, such as products, services, and resources and/or their specifications.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                }
            ]
        },
        "PartyOrPartyRole": {
            "description": "A Party or PartyRole or Ref",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "oneOf": [
                {
                    "$ref": "#/$defs/Individual"
                },
                {
                    "$ref": "#/$defs/Organization"
                },
                {
                    "$ref": "#/$defs/PartyRef"
                },
                {
                    "$ref": "#/$defs/PartyRoleRef"
                },
                {
                    "$ref": "#/$defs/PartyRole"
                }
            ]
        },
        "RelatedPartyOrPartyRole": {
            "description": "RelatedParty reference. A related party defines party or party role or its reference, linked to a specific entity",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "role",
                        "partyOrPartyRole"
                    ],
                    "properties": {
                        "role": {
                            "description": "Role played by the related party or party role in the context of the specific entity it is linked to. Such as 'initiator', 'customer',  'salesAgent', 'user'",
                            "type": "string",
                            "enum": [
                                "locationAContact",
                                "installationContact",
                                "technicalContact",
                                "deliveryContact",
                                "ownerAdministrationContact",
                                "ownerInstallationContact",
                                "orderManagementSellerContact",
                                "orderManagementBuyerContact",
                                "handingOverProvider",
                                "receivingProvider",
                                "subcontractor"
                            ]
                        },
                        "partyOrPartyRole": {
                            "$ref": "#/$defs/PartyOrPartyRole"
                        }
                    }
                }
            ]
        },
        "PartyRole": {
            "description": "The part played by a party in a given context.",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "required": [
                        "name",
                        "engagedParty"
                    ],
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "PartyRole"
                            ]
                        },
                        "businessId": {
                            "description": "A business relevant identifier when different from the technical identifier documented with the .id property",
                            "type": "string",
                            "example": "1234"
                        },
                        "name": {
                            "description": "A word, term, or phrase by which the PartyRole is known and distinguished from other PartyRoles. It's the name of the PartyRole unique entity.",
                            "type": "string",
                            "example": "PartyRoleName"
                        },
                        "description": {
                            "description": "A description of the PartyRole.",
                            "type": "string",
                            "example": "Lorem ipsum dolor"
                        },
                        "role": {
                            "description": "Role played by the engagedParty in this context. As role is defined by partyRoleSpecification, this role attribute can be used to precise the role defined by partyRoleSpecification, or it can be used to define the role in case there is no partyRoleSpecification.",
                            "type": "string",
                            "example": ""
                        },
                        "engagedParty": {
                            "$ref": "#/$defs/PartyRef"
                        },
                        "characteristic": {
                            "description": "Describes the characteristic of a party role.",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Characteristic"
                            },
                            "example": []
                        },
                        "account": {
                            "description": "Account",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/AccountRef"
                            },
                            "example": []
                        },
                        "agreement": {
                            "description": "Agreement",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/AgreementRef"
                            },
                            "example": []
                        },
                        "contactMedium": {
                            "description": "Contact medium",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ContactMedium"
                            },
                            "example": []
                        },
                        "relatedParty": {
                            "description": "Related party",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/RelatedPartyOrPartyRole"
                            },
                            "example": []
                        },
                        "status": {
                            "description": "Used to track the lifecycle status of the party role.",
                            "type": "string",
                            "example": ""
                        },
                        "statusReason": {
                            "description": "A string providing an explanation on the value of the status lifecycle. For instance if the status is Rejected, statusReason will provide the reason for rejection.",
                            "type": "string",
                            "example": ""
                        },
                        "validFor": {
                            "$ref": "#/$defs/TimePeriod"
                        }
                    }
                }
            ]
        },
        "Agreement": {
            "description": "An agreement represents a contract or arrangement, either written or verbal and sometimes enforceable by law, such as a service level agreement or a customer price agreement. An agreement involves a number of other business entities, such as products, services, and resources and/or their specifications.",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "required": [
                        "agreementType",
                        "name",
                        "businessId"
                    ],
                    "properties": {
                        "name": {
                            "description": "A human-readable name for the agreement",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "example": "contract no. 42"
                        },
                        "engagedParty": {
                            "description": "Engaged party",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/PartyOrPartyRole"
                            },
                            "example": []
                        },
                        "relatedParty": {
                            "description": "Related party",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/RelatedPartyOrPartyRole"
                            },
                            "example": []
                        },
                        "businessId": {
                            "description": "A business relevant identifier when different from the technical identifier documented with the .id property",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40,
                            "example": "1234"
                        },
                        "agreementType": {
                            "description": "Type of the agreement (e.g. witaContract, ServiceContractCustomer, ServiceContractOrderer, SingleContract, PreAgreement, witaContract,...)",
                            "type": "string",
                            "enum": [
                                "buyerServiceContract",
                                "ordererServiceContract",
                                "providerChangeAgreement",
                                "singleContract",
                                "singleContractPreProduct"
                            ],
                            "example": "ServiceContractOrderer"
                        }
                    }
                }
            ]
        },
        "AgreementRefOrValue": {
            "description": "Agreement reference or value",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "oneOf": [
                {
                    "$ref": "#/$defs/Agreement"
                },
                {
                    "$ref": "#/$defs/AgreementRef"
                }
            ]
        },
        "Note": {
            "description": "Extra information about a given entity",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "required": [
                        "text"
                    ],
                    "properties": {
                        "author": {
                            "description": "Author of the note",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40,
                            "example": "jarvis"
                        },
                        "date": {
                            "description": "Date of the note",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "text": {
                            "description": "Text of the note",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "example": "Lorem ipsum dolor"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "Note": "#/$defs/Note",
                    "InstallationInstruction": "#/$defs/InstallationInstruction"
                }
            }
        },
        "InstallationInstruction": {
            "description": "Specialization of Note",
            "allOf": [
                {
                    "$ref": "#/$defs/Note"
                },
                {
                    "type": "object"
                }
            ]
        },
        "Quantity": {
            "description": "An amount in a given unit",
            "type": "object",
            "properties": {
                "amount": {
                    "description": "Numeric value in a given unit",
                    "type": "number",
                    "format": "float",
                    "example": 20,
                    "default": 1
                },
                "units": {
                    "description": "Unit",
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "example": "MBit/s"
                }
            },
            "required": [
                "amount",
                "units"
            ]
        },
        "Duration": {
            "description": "A time interval in a given unit of time",
            "type": "object",
            "properties": {
                "amount": {
                    "description": "Time interval (number of seconds, minutes, hours, etc.)",
                    "type": "integer",
                    "example": 60
                },
                "units": {
                    "description": "Unit of time (seconds, minutes, hours, etc.)",
                    "type": "string",
                    "example": "seconds"
                }
            }
        },
        "Place": {
            "description": "Place value (base class).",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "properties": {
                        "externalIdentifier": {
                            "type": "array",
                            "description": "Collection of external identifiers",
                            "items": {
                                "$ref": "#/$defs/ExternalIdentifier"
                            }
                        }
                    }
                }
            ]
        },
        "GeographicSubAddress": {
            "description": "Representation of a GeographicSubAddress \nIt is used for addressing within a property in an urban area (country properties are often defined differently). It may refer to a building, a building cluster, or a floor of a multistory building.",
            "allOf": [
                {
                    "$ref": "#/$defs/Place"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 36
                        },
                        "buildingName": {
                            "description": "Allows for buildings that have well-known names",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 25,
                            "example": "Hinterhaus"
                        },
                        "buildingComplement": {
                            "description": "Additional designation for completing the building name",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 25,
                            "example": "n/a"
                        }
                    },
                    "oneOf": [
                        {
                            "required": [
                                "buildingName"
                            ]
                        },
                        {
                            "required": [
                                "id"
                            ]
                        }
                    ]
                }
            ]
        },
        "GeographicAddress": {
            "description": "Structured textual way of describing how to find a Property in an urban area (country properties are often defined differently).\nNote : Address corresponds to SID UrbanPropertyAddress",
            "allOf": [
                {
                    "$ref": "#/$defs/Place"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "GeographicAddress"
                            ]
                        },
                        "id": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 36
                        },
                        "city": {
                            "description": "City that the address is in",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40,
                            "example": "Berlin"
                        },
                        "country": {
                            "description": "Country that the address is in (ISO-3166-1 ALPHA-2)",
                            "type": "string",
                            "minLength": 2,
                            "maxLength": 2,
                            "example": "DE"
                        },
                        "locality": {
                            "description": "An area of defined or undefined boundaries within a local authority or other legislatively defined area, usually rural or semi rural in nature. [ANZLIC-STREET], or a suburb, a bounded locality within a city, town or shire principally of urban character [ANZLICSTREET]",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40,
                            "example": ""
                        },
                        "postcode": {
                            "description": "descriptor for a postal delivery area, used to speed and simplify the delivery of mail (also know as zipcode)",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 6,
                            "example": "10117"
                        },
                        "streetName": {
                            "description": "Name of the street or other street type",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 40,
                            "example": "Reinhardtstr."
                        },
                        "streetNr": {
                            "description": "Number identifying a specific property on a public street. It may be combined with streetNrLast for ranged addresses",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 4,
                            "example": "31"
                        },
                        "streetNrSuffix": {
                            "description": "the first street number suffix",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 6,
                            "example": "a"
                        },
                        "geographicSubAddress": {
                            "description": "Geographic sub address",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/GeographicSubAddress"
                            },
                            "example": []
                        }
                    },
                    "oneOf": [
                        {
                            "required": [
                                "city",
                                "postcode",
                                "streetName",
                                "streetNr"
                            ]
                        },
                        {
                            "required": [
                                "id"
                            ]
                        }
                    ]
                }
            ]
        },
        "GeographicSite": {
            "description": "Geographic site",
            "allOf": [
                {
                    "$ref": "#/$defs/Place"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "GeographicSite"
                            ]
                        },
                        "code": {
                            "description": "A code that may be used for some addressing schemes eg: [ANSI T1.253-1999]",
                            "type": "string",
                            "example": ""
                        },
                        "creationDate": {
                            "description": "Date and time when the GeographicSite was created",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "description": {
                            "description": "Text describing additional information regarding the site",
                            "type": "string",
                            "example": "Lorem ipsum dolor"
                        },
                        "place": {
                            "description": "Place",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Place"
                            },
                            "example": []
                        },
                        "geographicSiteCharacteristic": {
                            "description": "Geographic site characteristics",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Characteristic"
                            },
                            "example": []
                        },
                        "status": {
                            "description": "The condition of the GeographicSite, such as planned, underConstruction, cancelled, active, inactive, former",
                            "type": "string",
                            "example": "active"
                        }
                    }
                }
            ]
        },
        "PlaceRef": {
            "description": "Place reference.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "@type": {
                            "type": "string",
                            "enum": [
                                "PlaceRef"
                            ]
                        }
                    }
                }
            ]
        },
        "PlaceRefOrValue": {
            "description": "A place ref or value",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "oneOf": [
                {
                    "$ref": "#/$defs/GeographicAddress"
                },
                {
                    "$ref": "#/$defs/GeographicSite"
                },
                {
                    "$ref": "#/$defs/PlaceRef"
                }
            ]
        },
        "RelatedPlaceRefOrValue": {
            "description": "Entity reference. The polymorphic attributes @type, @schemaLocation & @referredType are related to the RelatedPlace entity and not the RelatedPlaceRefOrValue class itself",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "role",
                        "place"
                    ],
                    "properties": {
                        "role": {
                            "description": "Role played by the related entity",
                            "type": "string",
                            "example": ""
                        },
                        "place": {
                            "$ref": "#/$defs/PlaceRefOrValue"
                        }
                    }
                }
            ]
        },
        "TargetProductSchema": {
            "description": "The reference object to the schema and type of target product which is described by product specification",
            "type": "object",
            "properties": {
                "@schemaLocation": {
                    "description": "This field provides a link to the schema describing the target product",
                    "type": "string",
                    "example": "https://schemas.example.com/example/schema"
                },
                "@type": {
                    "description": "Class type of the target product",
                    "type": "string",
                    "example": ""
                }
            },
            "required": [
                "@schemaLocation",
                "@type"
            ]
        },
        "ProductSpecificationRef": {
            "description": "Product specification reference: A ProductSpecification is a detailed description of a tangible or intangible object made available externally in the form of a ProductOffering to customers or other parties playing a party role.",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                },
                {
                    "type": "object",
                    "properties": {
                        "name": {
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 100
                        },
                        "version": {
                            "description": "Version of the product specification",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 100,
                            "example": "1.0"
                        },
                        "targetProductSchema": {
                            "$ref": "#/$defs/TargetProductSchema",
                            "minLength": 1,
                            "maxLength": 100
                        }
                    }
                }
            ]
        },
        "ProductOffering": {
            "description": "Represents entities that are orderable from the provider of the catalog, this resource includes pricing information.",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "properties": {
                        "description": {
                            "description": "Description of the productOffering",
                            "type": "string",
                            "example": "Lorem ipsum dolor"
                        },
                        "version": {
                            "description": "ProductOffering version",
                            "type": "string",
                            "example": "1.0"
                        },
                        "lifecycleStatus": {
                            "description": "Used to indicate the current lifecycle status",
                            "type": "string",
                            "example": "created"
                        },
                        "name": {
                            "description": "Name of the productOffering",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 100,
                            "example": "product offering name"
                        },
                        "productSpecification": {
                            "description": "A ProductSpecification is a detailed description of a tangible or intangible object made available externally in the form of a ProductOffering to customers or other parties playing a party role.",
                            "$ref": "#/$defs/ProductSpecificationRef"
                        }
                    },
                    "required": [
                        "name"
                    ]
                }
            ]
        },
        "ProductOfferingRef": {
            "description": "ProductOffering reference. A product offering represents entities that are orderable from the provider of the catalog, this resource includes pricing information.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                }
            ]
        },
        "ProductOfferingRefOrValue": {
            "description": "The polymorphic attributes @type, @schemaLocation & @referredType are related to the Resource entity and not the ProductOfferingRefOrValue class itself",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "oneOf": [
                {
                    "$ref": "#/$defs/ProductOffering"
                },
                {
                    "$ref": "#/$defs/ProductOfferingRef"
                }
            ]
        },
        "TimeSlot": {
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "validFor"
                    ],
                    "properties": {
                        "id": {
                            "description": "Unique identifier of the TimeSlot",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "href": {
                            "description": "Reference of the TimeSlot",
                            "type": "string",
                            "example": "https://api.example.org/timeslot/id"
                        },
                        "relatedParty": {
                            "description": "RelatedParty reference. A related party defines party or party role linked to a specific entity.",
                            "$ref": "#/$defs/RelatedPartyOrPartyRole"
                        },
                        "validFor": {
                            "description": "Start date and end date of the timeSlot",
                            "$ref": "#/$defs/TimePeriod"
                        }
                    }
                }
            ]
        },
        "AppointmentRef": {
            "description": "Appointment reference.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                }
            ]
        },
        "AttachmentRef": {
            "description": "Attachment reference.",
            "type": "object",
            "allOf": [
                {
                    "$ref": "#/$defs/EntityRef"
                }
            ]
        },
        "Attachment": {
            "description": "Complements the description of an element (for instance a product) through video, pictures...",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "properties": {
                        "attachmentType": {
                            "description": "Attachment type such as video, picture",
                            "type": "string",
                            "example": "video"
                        },
                        "content": {
                            "description": "The actual contents of the attachment object, if embedded, encoded as base64",
                            "example": "",
                            "format": "base64",
                            "type": "string"
                        },
                        "description": {
                            "description": "A narrative text describing the content of the attachment",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 160,
                            "example": "Photograph of the Product"
                        },
                        "mimeType": {
                            "description": "Attachment mime type such as extension file for video, picture and document",
                            "type": "string",
                            "enum": [
                                "image/tiff",
                                "image/jpeg",
                                "application/msword",
                                "application/excel",
                                "application/pdf"
                            ],
                            "example": "image/tiff"
                        },
                        "name": {
                            "description": "The name of the attachment",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 255,
                            "example": "attachment.file"
                        },
                        "url": {
                            "description": "Uniform Resource Locator, is a web page address (a subset of URI)",
                            "type": "string",
                            "minLength": 1,
                            "maxLength": 2048,
                            "format": "uri",
                            "example": "https://api.example.org/content/4aafacbd-11ff-4dc8-b445-305f2215715f"
                        },
                        "size": {
                            "description": "The size of the attachment.",
                            "$ref": "#/$defs/Quantity"
                        },
                        "validFor": {
                            "description": "The period of time for which the attachment is valid",
                            "$ref": "#/$defs/TimePeriod"
                        }
                    },
                    "required": [
                        "name",
                        "attachmentType",
                        "content",
                        "mimeType"
                    ]
                }
            ]
        },
        "AttachmentRefOrValue": {
            "description": "Attachment reference or value",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "oneOf": [
                {
                    "$ref": "#/$defs/AttachmentRef"
                },
                {
                    "$ref": "#/$defs/Attachment"
                }
            ]
        },
        "AppointmentStateType": {
            "description": "Valid values for the lifecycle status of the appointment are:<ul>\n<li>*initialized*: Appointment initialized</li>\n<li>*confirmed*: Appointment confirmed</li>\n<li>*cancelled*: Appointment cancelled</li>\n<li>*completed*: Appointment completed</li>\n<li>*failed*: Appointment failed</li\n</ul>",
            "type": "string",
            "enum": [
                "initialized",
                "confirmed",
                "cancelled",
                "completed",
                "failed"
            ]
        },
        "Appointment": {
            "description": "An Appointment is an arrangement to do something or meet someone at a particular time, at a place (for face to face appointment) or in a contact medium (for phone appointment).",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "required": [
                        "validFor"
                    ],
                    "properties": {
                        "category": {
                            "description": "Business category : intervention for example or to be more precise after SalesIntervention, orderDeliveryIntervention,...",
                            "type": "string",
                            "example": "intervention"
                        },
                        "creationDate": {
                            "description": "Appointment creation date",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "description": {
                            "description": "Short free text describing the appointment",
                            "type": "string",
                            "example": "Lorem ipsum dolor"
                        },
                        "externalId": {
                            "description": "External reference known by the customer",
                            "type": "string",
                            "example": "1234"
                        },
                        "lastUpdate": {
                            "description": "Date of last appointment update",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "attachment": {
                            "description": "Attachment",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/AttachmentRefOrValue"
                            },
                            "example": []
                        },
                        "contactMedium": {
                            "description": "Contact medium",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ContactMedium"
                            },
                            "example": []
                        },
                        "note": {
                            "description": "Note",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Note"
                            },
                            "example": []
                        },
                        "relatedParty": {
                            "description": "Related party",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/RelatedPartyOrPartyRole"
                            },
                            "example": []
                        },
                        "relatedPlace": {
                            "description": "Related place defines (by reference or value) the place where the appointment will take place.",
                            "$ref": "#/$defs/RelatedPlaceRefOrValue"
                        },
                        "status": {
                            "$ref": "#/$defs/AppointmentStateType"
                        },
                        "validFor": {
                            "$ref": "#/$defs/TimePeriod"
                        }
                    }
                }
            ]
        },
        "AppointmentRefOrValue": {
            "description": "Appointment reference and value",
            "type": "object",
            "discriminator": {
                "propertyName": "@type"
            },
            "oneOf": [
                {
                    "$ref": "#/$defs/AppointmentRef"
                },
                {
                    "$ref": "#/$defs/Appointment"
                }
            ]
        },
        "Message": {
            "description": "A message described as a combination of a text and a code with additional info where required.",
            "type": "object",
            "properties": {
                "code": {
                    "description": "Predefined code corresponding to the message",
                    "type": "string",
                    "example": "00"
                },
                "text": {
                    "description": "Predefined text describing the message corresponding to the code",
                    "type": "string",
                    "example": "Lorem ipsum dolor"
                },
                "additionalInformation": {
                    "description": "additional textual information for the message",
                    "type": "string",
                    "example": "Lorem ipsum dolor"
                },
                "messageSource": {
                    "description": "Predefined text describing the message corresponding to the code (e.g. Related)",
                    "type": "string",
                    "example": "Related"
                }
            }
        },
        "StateChange": {
            "description": "Holds the state notification reasons and associated date the state changed, populated by the server",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "stateChangeDate",
                        "state"
                    ],
                    "properties": {
                        "stateChangeDate": {
                            "description": "The date and time the state changed.",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "stateChangeReason": {
                            "description": "Reason for the state change described as a combination of a text and a code.",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Message"
                            },
                            "example": []
                        },
                        "state": {
                            "description": "The state of the API resource",
                            "type": "string",
                            "example": ""
                        }
                    }
                }
            ]
        },
        "JeopardyAlert": {
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "description": "A JeopardyAlert represents a predicted exception during a process that may cause a risk\nto complete successfully the process.",
                    "properties": {
                        "id": {
                            "description": "Identifier of the JeopardyAlert",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "alertDate": {
                            "description": "A date time( DateTime). The date that the alert issued",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "name": {
                            "description": "A string used to give a name to the jeopardy alert",
                            "type": "string",
                            "example": "alert name"
                        },
                        "jeopardyAlertMessage": {
                            "description": "Text and code that represents the message of the jeopardy alert",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Message"
                            },
                            "example": []
                        },
                        "estimatedAlertEndDate": {
                            "description": "A date time(DateTime). The estimated date of the alert ending",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "exception": {
                            "description": "The exception associated with this jeopardy alert",
                            "type": "string"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "JeopardyAlert": "#/$defs/JeopardyAlert"
                }
            }
        },
        "Milestone": {
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "description": "Milestone represents an action or event marking a significant change or stage in a\nprocess like an order process.",
                    "properties": {
                        "id": {
                            "description": "Identifier of the Milestone",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "milestoneDate": {
                            "description": "A date time( DateTime). The date that the milestone happens",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "name": {
                            "description": "A string used to give a name to the milestone",
                            "type": "string",
                            "example": "milestone name"
                        },
                        "milestoneMessage": {
                            "description": "Text and code that represents the message of the milestone",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Message"
                            },
                            "example": []
                        },
                        "relatedState": {
                            "description": "Documents the state of the related API Resource at the time of the\nMilestone",
                            "type": "string",
                            "example": "active"
                        }
                    }
                }
            ],
            "discriminator": {
                "propertyName": "@type",
                "mapping": {
                    "Milestone": "#/$defs/Milestone"
                }
            }
        },
        "ErrorMessage": {
            "description": "Used when an API throws an Error, typically with a HTTP error response-code (3xx, 4xx, 5xx)",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "code",
                        "reason"
                    ],
                    "properties": {
                        "code": {
                            "description": "Application relevant detail, defined in the API or a common list.",
                            "type": "string",
                            "example": "0995"
                        },
                        "reason": {
                            "description": "Explanation of the reason for the error which can be shown to a client user.",
                            "type": "string",
                            "example": "human error"
                        },
                        "message": {
                            "description": "More details and corrective actions related to the error which can be shown to a client user.",
                            "type": "string",
                            "example": "Datenstruktur unzulässig."
                        },
                        "status": {
                            "description": "HTTP Error code extension",
                            "type": "string",
                            "example": "not found"
                        },
                        "referenceError": {
                            "description": "URI of documentation describing the error.",
                            "type": "string",
                            "format": "uri",
                            "example": "https://api.example.org/error/id"
                        }
                    },
                    "example": {
                        "@type": "ErrorMessage",
                        "code": "0995",
                        "reason": "human error",
                        "message": "Datenstruktur unzulässig.",
                        "status": "not found",
                        "referenceError": "https://api.example.org/error/id"
                    }
                }
            ]
        },
        "Extensible_FVO": {
            "description": "Base Extensible schema for use in TMForum Open-APIs - When used for in a schema it means that the Entity described by the schema  MUST be extended with the @type",
            "type": "object",
            "properties": {
                "@type": {
                    "description": "When sub-classing, this defines the sub-class Extensible name",
                    "type": "string",
                    "example": ""
                },
                "@baseType": {
                    "description": "When sub-classing, this defines the super-class",
                    "type": "string",
                    "example": ""
                },
                "@schemaLocation": {
                    "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
                    "type": "string",
                    "example": ""
                }
            },
            "discriminator": {
                "propertyName": "@type"
            },
            "required": [
                "@type"
            ]
        },
        "TaskStateType": {
            "description": "Possible values for the state of a task are:<ul>\n<li>*acknowledged*: The acknowledged state is used if a task resource has been received and has passed message and basic business validations.</li>\n<li>*rejected*: The task has been rejected during validation or processing.</li>\n<li>*inProgress*: The InProgress state is used while the task is being processed.</li>\n<li>*done*: The task has been completed and a result is available.</li>\n<li>*terminatedWithError*: The task could not be correctly completed and no result is available.</li>\n</ul>",
            "type": "string",
            "enum": [
                "acknowledged",
                "rejected",
                "inProgress",
                "done",
                "terminatedWithError"
            ]
        },
        "TaskEntity": {
            "description": "Base schema for task resource entities",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "properties": {
                        "state": {
                            "$ref": "#/$defs/TaskStateType"
                        },
                        "stateChangeDate": {
                            "description": "The date and time the state changed.",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "stateChangeReason": {
                            "description": "Reason for the state change described as a combination of a text and a code.",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/Message"
                            },
                            "example": []
                        },
                        "requestDate": {
                            "description": "Date when the task resource was created",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "requestPostedDate": {
                            "description": "Date when the request was posted",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "stateChangeHistory": {
                            "description": "The state change history that is associated to the Entity. Populated by the server",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/StateChange"
                            },
                            "example": []
                        },
                        "externalIdentifier": {
                            "description": "A reference to an externally defined object in the context of the managed entity",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ExternalIdentifier"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "Entity_FVO": {
            "description": "Base entity schema for use in TMForum Open-APIs. Property.",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "id": {
                            "description": "Unique identifier",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        }
                    }
                }
            ]
        },
        "TaskEntity_FVO": {
            "description": "Base schema for task resource FVO entities",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity_FVO"
                },
                {
                    "type": "object",
                    "properties": {
                        "requestPostedDate": {
                            "description": "Date when the request was posted",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "externalIdentifier": {
                            "description": "A reference to an externally defined object in the context of the managed entity",
                            "type": "array",
                            "items": {
                                "$ref": "#/$defs/ExternalIdentifier"
                            },
                            "example": []
                        }
                    }
                }
            ]
        },
        "Hub_FVO": {
            "description": "Sets the communication endpoint address the service instance must use to deliver notification information",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "required": [
                        "callback"
                    ],
                    "properties": {
                        "callback": {
                            "description": "The callback being registered.",
                            "type": "string",
                            "example": ""
                        },
                        "query": {
                            "description": "Additional data to be passed",
                            "type": "string",
                            "example": ""
                        }
                    }
                }
            ]
        },
        "Hub": {
            "description": "Sets the communication endpoint address the service instance must use to deliver notification information",
            "allOf": [
                {
                    "$ref": "#/$defs/Entity"
                },
                {
                    "type": "object",
                    "required": [
                        "callback"
                    ],
                    "properties": {
                        "callback": {
                            "description": "The callback being registered.",
                            "type": "string",
                            "example": ""
                        },
                        "query": {
                            "description": "Additional data to be passed",
                            "type": "string",
                            "example": ""
                        }
                    }
                }
            ]
        },
        "Event": {
            "description": "event with common attributes.",
            "allOf": [
                {
                    "$ref": "#/$defs/Extensible"
                },
                {
                    "type": "object",
                    "properties": {
                        "eventId": {
                            "description": "The identifier of the notification.",
                            "type": "string",
                            "example": "2d7ed5fd-9f62-4211-bc84-357f5f7b80f5"
                        },
                        "eventTime": {
                            "description": "Time of the event occurrence.",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "eventType": {
                            "description": "The type of the notification.",
                            "type": "string",
                            "example": ""
                        },
                        "description": {
                            "description": "An explanatory of the event.",
                            "type": "string",
                            "example": "Lorem ipsum dolor"
                        },
                        "timeOccurred": {
                            "description": "The time the event occurred.",
                            "type": "string",
                            "format": "date-time",
                            "example": "2023-01-01T08:00:00+01:00"
                        },
                        "source": {
                            "description": "Source Entity described by EntityRef",
                            "$ref": "#/$defs/EntityRef"
                        },
                        "reportingSystem": {
                            "description": "Reporting System described by EntityRef",
                            "$ref": "#/$defs/EntityRef"
                        }
                    },
                    "required": [
                        "eventId",
                        "eventTime",
                        "eventType",
                        "event"
                    ]
                }
            ]
        },
        "FieldPath": {
            "description": "Field path",
            "type": "object",
            "properties": {
                "path": {
                    "description": "Path of updated attribute",
                    "type": "string",
                    "example": "/productOrderItem/0/product/terminationDate"
                },
                "typeOfChange": {
                    "description": "Type of change",
                    "type": "string",
                    "example": "add"
                }
            },
            "required": [
                "path"
            ]
        }
    }
}