openapi: 3.0.3
info:
  title: 'Fibre Cafe : Supplier API'
  version: '1.15'
  description: >
    # Introduction


    The Fibre Cafe is a scalable, unified platform to support L2C provisioning,
    in-life modification/cease and

    T2R trouble resolution between communication providers (CP) and network
    operators or aggregators.


    CPs are known as 'tenants' on the Fibre Cafe and communicate with the Fibre
    Cafe's Tenant API. The

    network operators and aggregators providing the underlying services are
    known as 'suppliers' and provide

    the Supplier API.


    Each supplier is responsible for implementing this southbound API
    specification for the Fibre Cafe to retrieve

    available services and support appointing and order management.


    **Note:** Order updates (KCIs) must be sent to the Supplier Updates API
    hosted by the Fibre Cafe.

    __


    © 2022-2026 Strategic Imperatives
servers:
  - url: https://api.provided_by_supplier.net
tags:
  - name: Service Availability
    description: >
      Retrieve what services (if any) the supplier has available for a given
      address.


      This follows the concepts in TMF645 - Service Qualification API and TMF673
      - Address Management API.
  - name: Quote Management
    description: |
      Create and manage a quote to provide service at requested sites.
      This follows the concepts in TMF648 - Quote Management API.
  - name: Appointment Management
    description: >
      Retrieve and reserve appointments for installing a service at a given
      address.


      This follows the concepts in TMF646 - Appointment API.
  - name: Order Management
    description: >
      Create and manage an order to provide, cease or modify a service at a
      given address.


      This follows the concepts in TMF641 - Service Ordering Management API.
  - name: Service Test Management
    description: |
      Handle a request to perform a service test on a given active line/service.
  - name: Service Problem Management
    description: |
      Create and manage a service problem for a given line/service.
paths:
  /service-availability:
    get:
      tags:
        - Service Availability
      summary: Return available services for given address.
      description: >
        This endpoint is called to find what services are available at a given

        address with a supplier.


        An address query parameter will be supplied specifying address ID and
        type.


        All parameters are mandatory and will always be supplied by the Fibre
        Cafe.
      operationId: handleAvailabilityCheck
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
        - name: address
          description: >-
            Address identifier of provided type e.g. UPRN to check for service
            availability
          in: query
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddressIdentifier'
              example:
                id: '200004033694'
                type: UPRN
        - name: serviceTypes
          description: >-
            If specified, filter the service availability check to only include
            the specified service type(s)
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/ServiceTypeList'
      responses:
        '200':
          description: Request successful - zero or more services were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceAvailability'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - >-
                    Problem parsing request parameters - missing mandatory
                    parameter address
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Address type identifier was not recognised
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '503':
          description: Supplier API is temporarily unavailable
  /quote:
    post:
      tags:
        - Quote Management
      summary: Return a quote for available services for a given address.
      description: >
        This endpoint can be called to generate a quote for advanced services,
        such as Ethernet.

        The details of the individual supplier or list of suppliers must be
        specified in the request.
      operationId: handleQuote
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to link request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateQuote'
      responses:
        '201':
          description: Request successful - quote details were returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteResponse'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - sites must contain A-END and B-END entries
                  - >-
                    billingFrequency must be either monthly, quarterly or
                    annually
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /available-appointments:
    get:
      tags:
        - Appointment Management
      summary: Return available appointment slots for a given service and address.
      description: >
        This endpoint is called to find what appointments a supplier has
        available

        to install service(s) at a given address.


        An address query parameter will be supplied specifying address ID and
        type along

        with the required serviceSpecification(s) as returned by the
        /service-availability

        endpoint.


        All parameters are mandatory and will always be supplied by the Fibre
        Cafe.
      operationId: handleAppointmentAvailability
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
        - name: address
          description: >-
            Address identifier of provided type e.g. UPRN to check for
            appointment availability
          in: query
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddressIdentifier'
              example:
                id: '200004033694'
                type: UPRN
        - name: serviceSpecification
          description: The service to be installed during this appointment
          in: query
          required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceSpecification'
              example:
                id: ftthl2r
        - name: appointmentFromDate
          description: Find appointment slots from this date
          in: query
          required: false
          schema:
            type: string
            format: date
          example: '2022-01-05'
        - name: classifications
          description: >-
            Find appointment slots only of these classification types (comma
            delimited list)
          in: query
          required: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/TimeslotClassification'
          style: form
          explode: false
          example: WEEKDAY_AM,WEEKDAY_PM
        - name: appointmentPurpose
          in: query
          required: true
          schema:
            $ref: '#/components/schemas/AppointmentPurpose'
      responses:
        '200':
          description: >-
            Request successful - zero or more available appointments were
            returned
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AvailableAppointments'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - >-
                    Problem parsing request parameters - missing mandatory
                    parameter address
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Address type identifier was not recognised
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '503':
          description: Supplier API is temporarily unavailable
  /appointments:
    post:
      tags:
        - Appointment Management
      summary: Reserve an appointment slot.
      description: >
        This endpoint is called to reserve an appointment with a supplier to
        install

        service(s) at a given address.


        This endpoint will be supplied a previously returned available
        appointment

        slot to be reserved according to the supplier reservation policy. Where
        the

        reservation has a TTL (time to live) before being released, the expiry
        time

        should be returned.


        The returned appointment ID will be sent as part of the order at which
        point

        it should be considered confirmed.
      operationId: handleReserveAppointment
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAppointment'
      responses:
        '201':
          description: >-
            Operation successful - appointment was reserved. Returned ID will be
            used when placing order
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Service specification was invalid or not recognised
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '503':
          description: Supplier API is temporarily unavailable
  /service-orders:
    post:
      tags:
        - Order Management
      summary: Create an order to provide, cease or modify a service.
      description: >
        This endpoint is called to place an order with the supplier to provision
        a new service

        or cease/modify an existing service.


        The supplier should validate the order request and accept the order if
        the validation

        is successful or otherwise reject the order. If the order is rejected, a
        422 code

        should be returned with reason(s) for the rejection in the response.


        If the order is accepted, the supplier may return a 202 accepted
        response without

        acknowledging the order if further validation/processing is required. In
        this scenario,

        the supplier must then send an order update (KCI) to later acknowledge
        the order and

        provide the order number.


        Alternatively, the supplier can synchronously acknowledge the order by
        returning a 201

        created response with the returned order containing the supplier order
        number and status

        of ACKNOWLEDGED. The order can also be committed at this stage by
        returning the order

        status of IN_PROGRESS.
      operationId: handleCreateOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceOrder'
      responses:
        '201':
          description: >-
            Order was acknowledged - returned order should contain the supplier
            order number and appropriate status
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceOrder'
        '202':
          description: Order was accepted and will be acknowledged later via a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Service specification was invalid or not recognised
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '503':
          description: Supplier API is temporarily unavailable
  /service-order-amendments:
    post:
      tags:
        - Order Management
      summary: Request an amendment to an inflight provide, cease or modify order.
      description: >
        This endpoint is called to request amendment(s) to an existing inflight
        order

        to provision, modify or cease a service.


        A request will contain 1 or more fields to be amended - only fields
        supplied

        should be changed e.g. if a new contact phone number is provided then
        the existing

        contact name and email address would remain the same.


        The supplier should validate the amendment request. If the request is
        invalid or

        not possible then a 422 code should be returned with reason(s) for the
        rejection in

        the response.


        The supplier may return a 202 accepted response without confirming the
        cancellation

        if further validation/processing is required. In this scenario, the
        supplier must then

        send an order update (KCI) to later confirm the order was cancelled or
        if rejected.


        Alternatively, the supplier can confirm the amendment immediately by
        returning a

        201 created response.
      operationId: handleAmendOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceOrderAmendment'
        required: true
      responses:
        '201':
          description: >-
            Order amendment request was successful and the order has been
            updated.
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceOrderAmendment'
        '202':
          description: >-
            Order amendment request has been received and will be confirmed or
            rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Order amendment was invalid - primary contact is required
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '503':
          description: Supplier API is temporarily unavailable
  /service-order-cancellations:
    post:
      tags:
        - Order Management
      summary: Request to cancel an inflight provide, cease or modify order.
      description: >
        This endpoint is called to request cancellation of an existing inflight
        order

        to provision/modify/cease a service or for a cancellation other
        (unsolicited

        cease).


        The supplier should validate the cancellation request. If the request is
        invalid or

        not possible then a 422 code should be returned with reason(s) for the
        rejection in

        the response.


        The supplier may return a 202 accepted response without confirming the
        cancellation

        if further validation/processing is required. In this scenario, the
        supplier must then

        send an order update (KCI) to later confirm the order was cancelled or
        if rejected.


        Alternatively, the supplier can confirm the cancellation immediately by
        returning a

        201 created response.
      operationId: handleCancelOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceOrderCancellation'
      responses:
        '201':
          description: >-
            Order cancellation request was successful and the order has been
            cancelled.
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceOrderCancellation'
        '202':
          description: >-
            Order cancellation request has been received and will be confirmed
            or rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Order cancellation request invalid - unknown order
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '503':
          description: Supplier API is temporarily unavailable
  /ethernet/service-orders:
    post:
      tags:
        - Order Management
      summary: Create an order to provide ethernet service.
      description: >
        This endpoint can be called to place an ethernet order with a supplier
        to provide service. 

        Ability to cease or modify a service will follow in a later update.


        The supplier should validate the order request and accept the order if
        the validation

        is successful or otherwise reject the order. If the order is rejected, a
        422 code

        should be returned with reason(s) for the rejection in the response.


        If the order is accepted, the supplier may return a 202 accepted
        response without

        acknowledging the order if further validation/processing is required. In
        this scenario,

        the supplier must then send an order update (KCI) to later acknowledge
        the order and

        provide the order number.


        Alternatively, the supplier can synchronously acknowledge the order by
        returning a 201

        created response with the returned order containing the supplier order
        number and status

        of ACKNOWLEDGED. The order can also be committed at this stage by
        returning the order

        status of IN_PROGRESS.
      operationId: handleCreateEthernetOrder
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEthernetOrder'
      responses:
        '201':
          description: >-
            Order was acknowledged - returned order should contain the supplier
            order number and appropriate status
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SolicitedEthernetOrder'
        '202':
          description: Order was accepted and will be acknowledged later via a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - primaryContact is required
                  - >-
                    serviceOrderItem.serviceCharacteristics[?(@.name ==
                    'LINE_PROFILE')] is required
                  - >-
                    primaryContact.phoneNumber fails to match the required
                    pattern: ^+?[ds-#]{9,50}$
        '500':
          description: Unexpected Fibre Cafe error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 0884e75c-5424-456d-ac61-bef2010b7962
                code: GATEWAY_FAULT
                messages:
                  - An unexpected error occurred
        '503':
          description: Fibre Cafe is temporarily unavailable
  /service-tests:
    post:
      tags:
        - Service Test Management
      summary: Perform a service test on an active live/service.
      description: >
        This endpoint is called to request a service test on an active
        line/service.


        The supplier should validate and accept the request if the validation is
        successful or otherwise reject it.

        If the service test is rejected, a 422 code should be returned with
        reason(s) for the rejection in the response.


        If the service test is accepted, the supplier should return a 201
        created response with the service test reference

        and start the test. The result of the service test should be sent
        asynchronously via the [Fibre Cafe - Supplier Updates
        API](/openapi/supplier-updates/overview)

        once the test has completed.
      operationId: handleServiceTest
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceTest'
      responses:
        '201':
          description: >-
            Request was received by the supplier - result of service test will
            be sent via a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceTest'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - problemType is a mandatory field
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '501':
          description: The supplier has not implemented this endpoint
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: NOT_IMPLEMENTED
                messages:
                  - Endpoint is not supported by the supplier
        '503':
          description: Supplier API is temporarily unavailable
  /service-problems:
    post:
      tags:
        - Service Problem Management
      summary: >-
        Create a problem/incident for an active service owned by the
        communications provider (CP).
      description: >
        This endpoint is called to raise a problem with the supplier to resolve
        a potential issue with a service.


        The supplier should validate and accept the request if the validation is
        successful or otherwise reject it.

        If the request is rejected, a 422 code should be returned with reason(s)
        for the rejection in the response.


        If the request is accepted, the supplier may return a 202 accepted
        response without acknowledging the service

        problem if further validation/processing is required. In this scenario,
        the supplier must then send an update

        (KCI) to later acknowledge the service problem and provide the problem
        reference.


        Alternatively, the supplier can synchronously acknowledge the service
        problem by returning a 201 created response

        with the response containing the problem reference and status of
        ACKNOWLEDGED. The service problem can also be

        committed at this stage by returning the status of IN_PROGRESS.
      operationId: handleCreateProblem
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateServiceProblem'
      responses:
        '201':
          description: >-
            Service problem was acknowledged - response should contain the
            problem reference and appropriate status
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblem'
        '202':
          description: >-
            Service problem request was accepted and will be acknowledged later
            via a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - problemType is a mandatory field
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '501':
          description: The supplier has not implemented this endpoint
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: NOT_IMPLEMENTED
                messages:
                  - Endpoint is not supported by the supplier
        '503':
          description: Supplier API is temporarily unavailable
  /service-problem-amendments:
    post:
      tags:
        - Service Problem Management
      summary: Request to amend an inflight service problem.
      description: >
        This endpoint is called to request amendment of an existing inflight
        service problem on an active service.


        A request will contain 1 or more fields to be amended - only fields
        supplied should be changed.


        The supplier should validate the amendment request. If the request is
        invalid or not possible then a 422 code

        should be returned with reason(s) for the rejection in the response.


        The supplier may return a 202 accepted response without confirming the
        amendment if further validation/processing

        is required. In this scenario, the supplier must then send an update
        (KCI) to later confirm the amendment was 

        applied or if rejected.


        Alternatively, the supplier can confirm the amendment immediately by
        returning a 201 created response.
      operationId: handleAmendProblem
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ServiceProblemAmendment'
      responses:
        '201':
          description: >-
            Amendment request was successful and the service problem has been
            updated
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemAmendment'
        '202':
          description: >-
            Service problem amendment request has been received and will be
            confirmed or rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemAmendment'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Service problem amendment invalid - unknown order
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '501':
          description: The supplier has not implemented this endpoint
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: NOT_IMPLEMENTED
                messages:
                  - Endpoint is not supported by the supplier
        '503':
          description: Supplier API is temporarily unavailable
  /service-problem-cancellations:
    post:
      tags:
        - Service Problem Management
      summary: Request to cancel an inflight service problem.
      description: >
        This endpoint is called to request cancellation of an existing inflight
        service problem on an active service.


        The supplier should validate the cancellation request. If the request is
        invalid or not possible then a 422 code

        should be returned with reason(s) for the rejection in the response.


        The supplier may return a 202 accepted response without confirming the
        cancellation if further validation/processing

        is required. In this scenario, the supplier must then send an update
        (KCI) to later confirm the cancellation was

        completed or if rejected.


        Alternatively, the supplier can confirm the cancellation immediately by
        returning a 201 created response.
      operationId: handleCancelProblem
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ServiceProblemCancellation'
      responses:
        '201':
          description: >-
            Order cancellation request was successful and the order has been
            cancelled.
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemCancellation'
        '202':
          description: >-
            Order cancellation request has been received and will be confirmed
            or rejected later by a KCI
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemCancellation'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Service problem cancellation invalid - unknown order
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '501':
          description: The supplier has not implemented this endpoint
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: NOT_IMPLEMENTED
                messages:
                  - Endpoint is not supported by the supplier
        '503':
          description: Supplier API is temporarily unavailable
  /service-problem-resolutions/{id}:
    patch:
      tags:
        - Service Problem Management
      summary: Request to accept or reject resolution of an inflight service problem.
      description: >
        This endpoint is called to signify acceptance or rejection of a
        supplier's resolution to an inflight

        service problem.


        Where the tenant is satisfied with the resolution, the status of the
        resolution will be set to ACCEPTED and the

        service problem can be closed with the status set to COMPLETED.


        Alternatively, the status will be REJECTED if the tenant is not
        satisfied and they should provide a reason in

        the tenantNotes field. The status problem will be re-opened with the
        status set back to IN_PROGRESS.
      operationId: handleServiceProblemResolution
      security:
        - oauth2: []
      parameters:
        - name: X-Request-ID
          description: >-
            Unique identifier to identify request and response events across the
            Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: X-Conversation-ID
          description: Identifier to track message journey across the Fibre Cafe gateway
          in: header
          required: true
          schema:
            type: string
        - name: Tenant
          description: The tenant that has placed the request on the Fibre Cafe
          in: header
          required: true
          schema:
            type: string
            example: TENANT1
        - name: id
          in: path
          description: Service problem resolution identifier
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchServiceProblemResolution'
      responses:
        '200':
          description: Service problem resolution has been updated successfully
          headers:
            X-Request-ID:
              description: >-
                Unique identifier to identify request and response events across
                the Fibre Cafe gateway
              schema:
                type: string
              required: true
            X-Conversation-ID:
              description: >-
                Identifier to track message journey across the Fibre Cafe
                gateway
              schema:
                type: string
              required: true
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceProblemResolution'
        '400':
          description: >-
            Bad request - supplied request was malformed or missing mandatory
            parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: MALFORMED_REQUEST
                messages:
                  - Problems parsing request body - invalid JSON
        '401':
          description: Unauthorised access
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: 423d0696-5bde-453f-bbdd-25c73d48a9a9
                code: NOT_AUTHORISED
                messages:
                  - Not authorised to use this endpoint
        '403':
          description: The client is not permitted to access this resource.
        '422':
          description: Unprocessable entity - invalid data was provided
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ae2b3f5b-9fe1-4127-a4e5-13eac457080d
                code: INVALID_REQUEST
                messages:
                  - Service problem resolution invalid - unknown
        '500':
          description: Invalid or failed response from the supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: SUPPLIER_FAULT
                messages:
                  - An unexpected system error occurred
        '501':
          description: The supplier has not implemented this endpoint
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                uuid: ce4a17fe-c24c-47df-a62f-96c4cb08541b
                code: NOT_IMPLEMENTED
                messages:
                  - Endpoint is not supported by the supplier
        '503':
          description: Supplier API is temporarily unavailable
components:
  schemas:
    ServiceAvailability:
      description: >-
        Contains the available services at the selected address along with site
        information.
      type: object
      required:
        - address
        - serviceSpecifications
      properties:
        address:
          $ref: '#/components/schemas/Address'
        serviceSpecifications:
          description: List of services that are available at this address
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/ServiceSpecificationAvailability'
        siteInformation:
          $ref: '#/components/schemas/SiteInformation'
        unavailabilityReasons:
          description: Where there is no availability, provides the reason(s)
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/UnavailabilityReason'
    SiteInformation:
      description: >-
        Describes site installation details and any constraints that may apply,
        along with any existing lines.
      type: object
      properties:
        newLine:
          description: >-
            Indicates a new line can be installed even if there is an existing
            service
          type: boolean
          default: true
        installationType:
          allOf:
            - description: Type of installation required for a new line
            - $ref: '#/components/schemas/InstallationType'
        constraints:
          description: Where there are constraints that must be satisfied (soft LOC)
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/AvailabilityConstraint'
        serviceReadyDate:
          description: Date service will be/was ready
          type: string
          format: date
          example: '2022-01-01'
        enniId:
          description: Unique identifier of the ENNI (if available)
          type: string
          minLength: 1
          maxLength: 100
          example: S1889
        siteName:
          description: >-
            Unique identifier for point of presence/handover point (if
            available)
          type: string
          minLength: 1
          maxLength: 100
        siteLocation:
          description: Site address for the point of presence/handover point (if available)
          type: string
          minLength: 1
          maxLength: 100
        lineCharacteristics:
          description: Available characteristics of this new line (as supported)
          type: array
          items:
            $ref: '#/components/schemas/LineCharacteristic'
        existingLines:
          type: array
          items:
            $ref: '#/components/schemas/ExistingLine'
    ExistingLine:
      description: >-
        Describes line information of existing lines that can potentially be
        [re]started or taken over.
      type: object
      properties:
        enniId:
          description: Unique identifier of the ENNI (if available)
          type: string
          minLength: 1
          maxLength: 100
          example: S1889
        siteName:
          description: >-
            Unique identifier for point of presence/handover point (if
            available)
          type: string
          minLength: 1
          maxLength: 100
        siteLocation:
          description: Site address for the point of presence/handover point (if available)
          type: string
          minLength: 1
          maxLength: 100
        installationType:
          allOf:
            - description: >-
                Type of installation/appointment required for a switch or
                restart of an existing line - omit if not required
            - $ref: '#/components/schemas/InstallationType'
        ont:
          $ref: '#/components/schemas/Ont'
        lineId:
          description: >-
            Where the line has a unique access identifier - usually reserved for
            FTTC i.e. copper-based lines
          type: string
          minLength: 1
          maxLength: 100
          example: OHP5738089O3
        lineCharacteristics:
          description: Available characteristics of this line (as supported)
          type: array
          items:
            $ref: '#/components/schemas/LineCharacteristic'
    LineCharacteristic:
      description: A characteristic or attribute of an available line.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the line characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: DOWNSTREAM_BANDWIDTH
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: '68700'
    AvailabilityConstraint:
      description: >-
        Where there is availability but there are some constaints to the
        installation.
      type: object
      required:
        - code
      properties:
        code:
          $ref: '#/components/schemas/AvailabilityConstraintCode'
        text:
          description: Text explaining any constraint or LOC (optional)
          type: string
          minLength: 1
          maxLength: 1000
    Ont:
      description: >-
        An existing ONT device that can be used for a (re)start or line
        takeover.
      type: object
      required:
        - ontReference
        - ports
      properties:
        ontReference:
          description: ONT reference number
          type: string
          example: ONT0000123123
          minLength: 1
          maxLength: 20
        serialNumber:
          description: ONT serial number
          type: string
          example: '1234567890'
          minLength: 1
          maxLength: 100
        manufacturer:
          description: ONT manufacturer (if available)
          type: string
          example: Nokia
          minLength: 1
          maxLength: 100
        floor:
          description: ONT location - floor (if available/applicable)
          type: string
          example: '1'
          minLength: 1
          maxLength: 100
        room:
          description: ONT location - room (if available/applicable)
          type: string
          example: Reception
          minLength: 1
          maxLength: 100
        position:
          description: ONT location - position (if available/applicable)
          type: string
          minLength: 1
          maxLength: 100
        ports:
          description: ONT port number(s)
          type: array
          items:
            $ref: '#/components/schemas/OntPort'
    OntPort:
      description: Defines an individual port on an ONT
      type: object
      required:
        - portNumber
      properties:
        portNumber:
          description: ONT port number
          type: number
          example: 2
        description:
          description: Description/identifier/type of ONT port if available
          type: string
          minLength: 1
          maxLength: 100
          example: Data
        status:
          $ref: '#/components/schemas/PortStatus'
        tenantActive:
          description: >-
            True if this port is active on the tenant's network or false if a
            different tenant - omit if information is not available
          type: boolean
          example: false
        stoppedDate:
          description: The date the port was previously stopped (if applicable)
          type: string
          format: date-time
          example: '2022-01-01T13:45:00.000Z'
    UnavailabilityReason:
      description: Where there is no availability, provide the reason.
      type: object
      required:
        - code
      properties:
        code:
          $ref: '#/components/schemas/UnavailabilityReasonCode'
        text:
          description: Text explaining reason for no availability (optional)
          type: string
          minLength: 1
          maxLength: 1000
    AvailableAppointments:
      description: >-
        Represents the available appointment time slots for the chosen address
        and service.
      type: object
      required:
        - availableTimeslots
      properties:
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        availableTimeslots:
          description: List of available appointment timeslots
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/Timeslot'
    CreateAppointment:
      description: >-
        Represents an appointment with the supplier for the chosen address and
        service(s). The id will be sent when placing an order to confirm the
        appointment.
      type: object
      required:
        - id
        - address
        - serviceSpecification
        - type
        - timeslot
      properties:
        id:
          description: Unique identifier for this appointment
          type: number
          minimum: 1
          example: 234
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        purpose:
          $ref: '#/components/schemas/AppointmentPurpose'
        timeslot:
          $ref: '#/components/schemas/Timeslot'
    Appointment:
      allOf:
        - type: object
          properties:
            supplierReference:
              description: Unique reference generated by the supplier for this appointment
              type: string
              minLength: 1
              maxLength: 50
              example: A234
            expiryDateTime:
              description: >-
                Where an appointment is reserved, this contains the date/time
                when the reservation will expire.
              type: string
              format: date-time
              example: '2022-01-01T13:45:00.000Z'
        - $ref: '#/components/schemas/CreateAppointment'
    CreateServiceOrder:
      oneOf:
        - $ref: '#/components/schemas/CreateProvideServiceOrder'
        - $ref: '#/components/schemas/CreateCeaseServiceOrder'
        - $ref: '#/components/schemas/CreateModifyServiceOrder'
    ServiceOrder:
      oneOf:
        - $ref: '#/components/schemas/ProvideServiceOrder'
        - $ref: '#/components/schemas/CeaseServiceOrder'
        - $ref: '#/components/schemas/ModifyServiceOrder'
    CreateProvideServiceOrder:
      description: Represents a provide order for new service(s) at a particular address.
      type: object
      required:
        - id
        - orderType
        - tenant
        - address
        - serviceOrderItem
        - primaryContact
      properties:
        id:
          description: >-
            Unique id identifying this service order - generated by the Fibre
            Cafe
          type: number
          minimum: 1
          example: 123
        orderType:
          $ref: '#/components/schemas/ProvideOrderType'
        tenant:
          description: The tenant that has placed the order on the Fibre Cafe
          type: string
          minLength: 1
          maxLength: 50
          example: TENANT1
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        serviceOrderItem:
          $ref: '#/components/schemas/ServiceOrderItem'
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the reserved appointment (if applicable)
          type: number
          minimum: 1
          example: 234
        appointmentReservationReference:
          description: >-
            Unique reference identifying the appointment - supplier reference
            (if applicable)
          type: string
          minLength: 1
          maxLength: 50
          example: A234X
        requestedCompletionDate:
          description: >-
            Where not appointed, allows a date to be requested for the service
            activation
          type: string
          format: date
          example: '2022-01-10'
        engineerTasks:
          $ref: '#/components/schemas/EngineerTasks'
        hazards:
          description: >-
            Hazard information about the site where the service(s) will be
            installed
          type: string
          minLength: 1
          maxLength: 1000
          example: Hazardous materials stored on site
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service(s) will
            be installed
          type: string
          minLength: 1
          maxLength: 1000
          example: Restricted access
        notes:
          description: >-
            Any notes about the order. This may include additional information
            that is required
          type: string
          minLength: 1
          maxLength: 1000
          example: Lorem ipsum dolor sit amet...
    ProvideServiceOrder:
      allOf:
        - type: object
          required:
            - status
          properties:
            status:
              $ref: '#/components/schemas/OrderStatus'
            supplierReference:
              description: >-
                Unique reference identifying this service - order supplier
                (where applicable)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                cannot change.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date. This can be different to
                the committedDate if the order has been delayed for any reason,
                and can change possibly multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
        - $ref: '#/components/schemas/CreateProvideServiceOrder'
    ServiceOrderItem:
      description: Order for a service that the supplier provides at the selected address.
      type: object
      required:
        - serviceSpecification
        - serviceCharacteristics
      properties:
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        serviceCharacteristics:
          description: List of service characteristics for the service order item
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
    ServiceSpecification:
      description: Details of a service the supplier provides at the selected address.
      type: object
      required:
        - id
      properties:
        id:
          description: Unique identifier for this service specification (if available)
          type: string
          minLength: 1
          maxLength: 50
          example: ftthl2r
        name:
          description: Name of the service
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: FTTH
    ServiceSpecificationAvailability:
      allOf:
        - $ref: '#/components/schemas/ServiceSpecification'
        - type: object
          properties:
            serviceCharacteristics:
              description: Service characteristics supported by this service
              type: array
              items:
                $ref: '#/components/schemas/ServiceCharacteristicAvailability'
    ServiceCharacteristicAvailability:
      description: >-
        A characteristic or attribute of an available service (where
        applicable).
      type: object
      required:
        - name
        - values
      properties:
        name:
          description: Name of the service characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: LINE_PROFILE
        values:
          description: Supported values for this characteristic
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 50
            example: 100/20
    Service:
      description: The details regarding the Ethernet service
      type: object
      required:
        - serviceSpecification
        - serviceCharacteristic
      properties:
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        serviceCharacteristic:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/Characteristic'
    Price:
      description: A generic entity to capture the price of a product/service.
      type: object
      required:
        - value
        - unit
      properties:
        value:
          description: The price of the entity
          type: number
          multipleOf: 0.01
          minimum: 0
          example: 25
        unit:
          description: The currency unit of the price, based on ISO-4217
          type: string
          minLength: 3
          maxLength: 3
          example: GBP
    PriceItem:
      description: A generic entity to capture the pricing details of a product/service.
      type: object
      required:
        - product
        - priceType
        - unit
      properties:
        product:
          description: >-
            The product or add-on the price relates to, as defined by the
            supplier
          type: string
          maxLength: 100
        productLocation:
          description: >-
            The location the product is served from, as defined by the supplier.
            Only provided if it impacts price.
          type: string
          maxLength: 64
        priceType:
          description: The type of price
          type: string
          enum:
            - ONE_OFF
            - RECURRING
        pricePeriod:
          description: The period the price applies
          type: string
          enum:
            - ONCE
            - DAILY
            - WEEKLY
            - MONTHLY
            - QUARTERLY
            - ANNUALLY
        price:
          $ref: '#/components/schemas/Price'
        description:
          description: A description of the price
          type: string
          minLength: 0
          maxLength: 64
    ContractLength:
      description: A generic entity to capture the duration of a contract
      type: object
      required:
        - value
        - unit
      properties:
        value:
          description: The length of the contract
          type: integer
          minimum: 0
          example: 36
        unit:
          description: The duration unit of the contract
          type: string
          enum:
            - MONTH
            - YEAR
          example: MONTH
    ContractItem:
      description: A generic entity to capture the contract details of a product/service.
      type: object
      required:
        - contractLength
        - billingFrequency
      properties:
        contractLength:
          $ref: '#/components/schemas/ContractLength'
        billingFrequency:
          description: The frequency the product/service will be invoiced by the supplier
          type: string
          enum:
            - MONTHLY
            - QUARTERLY
            - ANNUALLY
        priceAlteration:
          description: >-
            A price override/promotion code available between the tenant and
            supplier
          type: string
          minLength: 0
          maxLength: 64
    CreateQuote:
      description: A generic entity to capture the quote details of a product/service.
      type: object
      required:
        - id
        - sites
        - contractDetails
        - service
      properties:
        id:
          description: A unique identifier of the quote (generated by the Fibre Cafe)
          type: integer
          minimum: 1
        externalIdentifier:
          description: A unique identifier of the quote as provided by the tenant
          type: string
          minLength: 0
          maxLength: 64
          example: QUO-ETH-5001
        sites:
          type: array
          minItems: 2
          items:
            $ref: '#/components/schemas/Site'
        contractDetails:
          $ref: '#/components/schemas/ContractItem'
        service:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/Service'
    QuoteAvailable:
      description: A generic entity to capture the available quote detail response.
      allOf:
        - $ref: '#/components/schemas/CreateQuote'
        - type: object
          required:
            - supplierQuoteId
            - estimate
            - created
            - validFor
            - quotePrices
          properties:
            supplierQuoteId:
              description: >-
                A unique identifier generated by the supplier for the quote item
                within the overall quote entity, as provided by the supplier
              type: string
              minLength: 0
              maxLength: 64
              example: SUPP2-QUO-ETH-5001
            estimate:
              description: >-
                Set to true if the quote provided is considered an advisory
                quote or estimate and final quote provided as part of the order
                process.
              type: boolean
              example: false
            created:
              description: Date/time when the quote was created
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            validFor:
              description: Date/time the quote remains valid
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            quotePrices:
              $ref: '#/components/schemas/QuotePrices'
    QuoteUnavailable:
      description: Returned where a supplier cannot return a quote for the sites
      type: object
      required:
        - unavailabilityReasons
      properties:
        unavailabilityReasons:
          description: Provides the reason(s) the supplier has not returned a quote
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/NoQuoteReason'
    QuotePrices:
      description: >-
        The price of the quote as provided by the supplier for a
        product/service.
      type: array
      minItems: 0
      items:
        $ref: '#/components/schemas/PriceItem'
    QuoteResponse:
      description: A generic entity to capture the quote details of a product/service.
      type: object
      required:
        - id
      properties:
        id:
          description: >-
            Unique reference identifying this quote request - generated by the
            Fibre Cafe)
          type: string
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          example: 3456cf7d-4471-42e4-a5be-c24ed58a7aa6
        externalIdentifier:
          description: A unique identifier of the quote as provided by the tenant
          type: string
          minLength: 0
          maxLength: 64
          example: QUO-ETH-5001
      oneOf:
        - $ref: '#/components/schemas/QuoteAvailable'
        - $ref: '#/components/schemas/QuoteUnavailable'
    Wayleave:
      description: Particulars regarding permissions at a given site.
      allOf:
        - type: object
          required:
            - wayleaveOwner
          properties:
            wayleaveOwner:
              description: >-
                Set to true if the organisation placing the order has wayleave
                permissions, otherwise set to false.
              type: boolean
              example: true
            wayleaveCharacteristics:
              description: >-
                Information about restrictions on the site where the service
                will be installed.
              type: array
              minItems: 1
              items:
                $ref: '#/components/schemas/Characteristic'
            wayleaveContact:
              $ref: '#/components/schemas/Contact'
        - oneOf:
            - title: wayleaveCharacteristics
              required:
                - wayleaveCharacteristics
            - title: wayleaveContact
              required:
                - wayleaveContact
    Site:
      description: Provides details for each of the Ethernet sites as part of the quote.
      type: object
      required:
        - name
        - postcode
        - role
        - address
      properties:
        name:
          description: The name of the site
          type: string
          example: Strategic Imperative Offices
        postcode:
          description: Postal code
          type: string
          minLength: 1
          maxLength: 12
          example: TW184LG
        role:
          $ref: '#/components/schemas/SiteRole'
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        siteCharacteristics:
          type: array
          minItems: 0
          items:
            $ref: '#/components/schemas/Characteristic'
    EthernetSiteInformation:
      description: Details of the Ethernet Site for the order
      type: object
      allOf:
        - $ref: '#/components/schemas/Site'
        - type: object
          required:
            - wayleave
            - primaryContact
            - secondaryContact
          properties:
            wayleave:
              $ref: '#/components/schemas/Wayleave'
            primaryContact:
              $ref: '#/components/schemas/Contact'
            secondaryContact:
              $ref: '#/components/schemas/Contact'
            hazards:
              description: >-
                Hazard information about the site where the service will be
                installed
              type: string
              example: Hazardous materials stored on site
              minLength: 1
              maxLength: 1000
            onSiteRestrictions:
              description: >-
                Information about restrictions on the site where the service
                will be installed
              type: string
              example: Restricted access
              minLength: 1
              maxLength: 1000
            notes:
              description: >-
                Any additional notes about the  site. This may include
                additional information that is required
              type: string
              example: Lorem ipsum dolor sit amet...
              minLength: 1
              maxLength: 1000
    CreateEthernetOrder:
      oneOf:
        - $ref: '#/components/schemas/CreateProvideEthernetOrder'
    SolicitedEthernetOrder:
      oneOf:
        - $ref: '#/components/schemas/ProvideEthernetOrder'
    ServiceCharacteristic:
      description: A characteristic or attribute of an available service.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the service characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: ENNI_ID
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: '1'
    CreateServiceOrderAmendment:
      oneOf:
        - $ref: '#/components/schemas/CreateProvideServiceOrderAmendment'
        - $ref: '#/components/schemas/CreateCeaseServiceOrderAmendment'
        - $ref: '#/components/schemas/CreateModifyServiceOrderAmendment'
    ServiceOrderAmendment:
      oneOf:
        - $ref: '#/components/schemas/ProvideServiceOrderAmendment'
        - $ref: '#/components/schemas/CeaseServiceOrderAmendment'
        - $ref: '#/components/schemas/ModifyServiceOrderAmendment'
    CreateProvideServiceOrderAmendment:
      description: >-
        Represents a request to amend an existing inflight service provide
        order. Any value(s) supplied will replace the existing value(s).
      type: object
      required:
        - id
        - orderId
      properties:
        id:
          description: >-
            Unique identifier for this provide service order amendment request
            (generated by the Fibre Cafe)
          type: number
          minimum: 1
          example: 234
        orderId:
          description: Unique reference identifying the service order to be amended
          type: number
          minimum: 1
          example: 123
        serviceCharacteristics:
          description: List of service characteristics for the service order item
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the reserved appointment (if applicable)
          type: number
          minimum: 1
          example: 345
        appointmentReservationReference:
          description: >-
            Unique reference identifying the appointment - supplier reference
            (if applicable)
          type: string
          minLength: 1
          maxLength: 50
          example: A234X
        requestedCompletionDate:
          description: >-
            Where not appointed, allows the tenant/customer to request a date
            for the service activation
          type: string
          format: date
          example: '2022-01-10'
        engineerTasks:
          $ref: '#/components/schemas/EngineerTasks'
        hazards:
          description: >-
            Hazard information about the site where the service will be
            installed
          type: string
          minLength: 1
          maxLength: 1000
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service(s) will
            be installed
          type: string
          minLength: 1
          maxLength: 1000
        notes:
          description: Notes about the order
          type: string
          minLength: 1
          maxLength: 1000
          example: Lorem ipsum dolor sit amet...
    ProvideServiceOrderAmendment:
      allOf:
        - $ref: '#/components/schemas/CreateProvideServiceOrderAmendment'
        - type: object
          properties:
            supplierReference:
              description: >-
                Unique reference generated by the supplier for this amendment
                request
              type: string
              minLength: 1
              maxLength: 50
              example: A123-1
            committedDate:
              description: >-
                Where this amendment has resulted in a change to the order
                committed date, this field will contain the new date.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                Where this amendment has resulted in a change to the expected
                completion date, this field will contain the new date.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
    CreateCeaseServiceOrder:
      description: Request to cease an existing live service.
      type: object
      required:
        - id
        - orderType
        - tenant
        - serviceId
        - requestedCompletionDate
      properties:
        id:
          description: >-
            Unique reference identifying this cease service order (generated by
            the Fibre Cafe)
          type: number
          minimum: 1
          example: 123
        orderType:
          allOf:
            - $ref: '#/components/schemas/CeaseOrderType'
            - example: CEASE
        tenant:
          description: The tenant that has placed the order on the Fibre Cafe
          type: string
          minLength: 1
          maxLength: 50
          example: TENANT1
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        requestedCompletionDate:
          description: >-
            The requested date/time for the service to cease (time might not be
            supported by all suppliers)
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    CeaseServiceOrder:
      allOf:
        - type: object
          required:
            - status
          properties:
            status:
              $ref: '#/components/schemas/OrderStatus'
            supplierReference:
              description: >-
                Order reference generated by the supplier once acknowledged (for
                information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                cannot change.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date. This can be different to
                the committedDate if the order has been delayed for any reason,
                and can change possibly multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
        - $ref: '#/components/schemas/CreateCeaseServiceOrder'
    CreateCeaseServiceOrderAmendment:
      description: Represents a request to amend an existing inflight service cease order.
      type: object
      required:
        - id
        - orderId
      properties:
        id:
          description: >-
            Unique identifier for this cease service order amendment request
            (generated by the Fibre Cafe)
          type: number
          minimum: 1
          example: 234
        orderId:
          description: Unique identifier for the cease service order to be amended
          type: number
          minimum: 1
          example: 123
        requestedCompletionDate:
          description: The replacement requested date/time for the service to cease
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    CeaseServiceOrderAmendment:
      allOf:
        - type: object
          properties:
            supplierReference:
              description: >-
                Unique reference generated by the supplier for this amendment
                request
              type: string
              minLength: 1
              maxLength: 50
              example: A123-1
        - $ref: '#/components/schemas/CreateCeaseServiceOrderAmendment'
    CreateModifyServiceOrder:
      description: >-
        Request to modify an existing live service - specify the replacement
        characteristic(s). The requested date for completion can be specified
        but may not be supported by all suppliers.
      type: object
      required:
        - id
        - orderType
        - tenant
        - serviceId
        - serviceCharacteristics
      properties:
        id:
          description: >-
            Unique identifier for this modify service order (generated by the
            Fibre Cafe)
          type: number
          minimum: 1
          example: 123
        orderType:
          $ref: '#/components/schemas/ModifyOrderType'
        tenant:
          description: The tenant that has placed the order on the Fibre Cafe
          type: string
          minLength: 1
          maxLength: 50
          example: TENANT1
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        serviceCharacteristics:
          description: Service characteristics to be updated e.g. LINE_PROFILE
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
        requestedCompletionDate:
          description: >-
            The requested date/time from the tenant/customer for the modify to
            complete (if supported)
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    ModifyServiceOrder:
      allOf:
        - type: object
          required:
            - status
          properties:
            status:
              $ref: '#/components/schemas/OrderStatus'
            supplierReference:
              description: Order reference generated by the supplier once acknowledged
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                cannot change.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date. This can be different to
                the committedDate if the order has been delayed for any reason,
                and can change possibly multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
        - $ref: '#/components/schemas/CreateModifyServiceOrder'
    CreateModifyServiceOrderAmendment:
      description: >-
        Represents a request to amend an existing inflight service modify order.
        Any service characteristic(s) supplied should replace the existing
        value(s).
      type: object
      required:
        - id
        - orderId
      properties:
        id:
          description: >-
            Unique identifier for this modify service order amendment request
            (generated by the Fibre Cafe)
          type: number
          minimum: 1
          example: 234
        orderId:
          description: Unique identifier for the modify service order to be amended
          type: number
          minimum: 1
          example: 123
        serviceCharacteristics:
          description: Service characteristics to be updated e.g. LINE_PROFILE
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceCharacteristic'
        requestedCompletionDate:
          description: The requested date/time for the modify to complete (if supported)
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
    ModifyServiceOrderAmendment:
      allOf:
        - type: object
          properties:
            supplierReference:
              description: >-
                Unique reference generated by the supplier for this amendment
                request
              type: string
              minLength: 1
              maxLength: 50
              example: A123-1
        - $ref: '#/components/schemas/CreateModifyServiceOrderAmendment'
    CreateServiceOrderCancellation:
      description: Represents a request from the tenant to cancel an inflight order.
      type: object
      required:
        - id
        - orderId
        - reasonCode
      properties:
        id:
          description: >-
            Unique identifier for this order cancellation request (generated by
            the Fibre Cafe)
          type: number
          minimum: 1
          example: 345
        orderId:
          description: Unique id identifying the service order to be amended
          type: number
          minimum: 1
          example: 123
        reasonCode:
          $ref: '#/components/schemas/CancellationReasonCode'
        supplierOrderReference:
          description: Order reference provided by the supplier
          type: string
          minLength: 1
          maxLength: 50
          example: A123X
    ServiceOrderCancellation:
      allOf:
        - type: object
          properties:
            supplierReference:
              description: >-
                Unique reference generated by the supplier for this cancellation
                request
              type: string
              minLength: 1
              maxLength: 50
              example: A123-1
        - $ref: '#/components/schemas/CreateServiceOrderCancellation'
    CreateProvideEthernetOrder:
      description: >-
        Represents an Ethernet order for new service(s) between the sites
        provided.
      type: object
      required:
        - id
        - tenant
        - supplierQuoteId
        - siteInformation
        - ethernetOrderItem
      properties:
        id:
          description: >-
            Unique id identifying this service order - generated by the Fibre
            Cafe
          type: number
          minimum: 1
          example: 123
        tenant:
          description: The tenant that has placed the order on the Fibre Cafe
          type: string
          minLength: 1
          maxLength: 50
          example: TENANT1
        supplierQuoteId:
          description: >-
            A unique identifier of the quote item within the overall quote
            entity, as provided by the supplier
          type: string
          minLength: 0
          maxLength: 64
          example: SUPP2-QUO-ETH-5001
        siteInformation:
          type: array
          minItems: 2
          items:
            $ref: '#/components/schemas/EthernetSiteInformation'
        ethernetOrderItem:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/EthernetOrderItem'
    ProvideEthernetOrder:
      allOf:
        - type: object
          required:
            - id
            - tenant
            - status
          properties:
            id:
              description: >-
                Unique reference identifying this ethernet order (order number -
                generated by the Fibre Cafe)
              type: number
              minimum: 1
              example: 123
            tenant:
              description: The tenant that has placed the order on the Fibre Cafe
              type: string
              minLength: 1
              maxLength: 50
              example: TENANT1
            status:
              $ref: '#/components/schemas/OrderStatus'
            supplierOrderNumber:
              description: >-
                Order reference generated by the supplier once acknowledged (for
                information only)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
            created:
              description: Date/time when the order was created
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            updated:
              description: Date/time when the order was last updated
              type: string
              format: date-time
              example: '2022-01-01T09:45:39.001Z'
            committedDate:
              description: >-
                When the supplier first commits to fulfil the order this field
                will contain the expected completion date. Once set, this value
                will not change unless driven by the tenant/customer.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
            targetDate:
              description: >-
                The current expected completion date - set once the order is
                committed. This can be different to the committedDate if the
                order has been delayed for any reason, and can change possibly
                multiple times.
              type: string
              format: date-time
              example: '2022-01-01T09:09:33.001Z'
        - $ref: '#/components/schemas/CreateProvideEthernetOrder'
    EthernetOrderItem:
      description: >-
        Represents an Ethernet order for new service(s) between the sites
        provided.
      type: object
      required:
        - contractDetails
        - service
      properties:
        service:
          $ref: '#/components/schemas/Service'
        contractDetails:
          $ref: '#/components/schemas/ContractItem'
        requestedCompletionDate:
          description: >-
            Where not appointed, allows a date to be requested for the service
            activation.
          type: string
          format: date
          example: '2022-01-10'
        technicalContact:
          $ref: '#/components/schemas/Contact'
    Timeslot:
      description: Represents an appointment timeslot with a supplier.
      type: object
      required:
        - timeslotStartDateTime
        - timeslotEndDateTime
      properties:
        timeslotStartDateTime:
          description: Start date/time for this timeslot
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        timeslotEndDateTime:
          description: End date/time for this timeslot
          type: string
          format: date-time
          example: '2022-01-10T13:00:00.000Z'
        classification:
          $ref: '#/components/schemas/TimeslotClassification'
        standard:
          description: Timeslot is classified as standard (non-premium)
          type: boolean
          readOnly: true
          default: true
    ServiceTypeList:
      description: >-
        List of service types to filter availability checks by. If not supplied,
        this will default to `[BROADBAND]`.
      type: array
      minItems: 1
      default:
        - BROADBAND
      items:
        $ref: '#/components/schemas/ServiceType'
      example:
        - BROADBAND
        - ETHERNET
    AddressIdentifier:
      description: Address identifier for location including type of identifier.
      type: object
      required:
        - id
        - type
      properties:
        id:
          description: Address identifier of provided type e.g. UPRN
          type: string
          example: '200004033694'
        type:
          description: Type of addressId provided e.g. UPRN
          type: string
          example: UPRN
    Address:
      description: Address for location associated with the service order.
      type: object
      required:
        - identifier
      properties:
        identifier:
          $ref: '#/components/schemas/AddressIdentifier'
        name:
          description: Identifying name of the sub unit
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: TWENTY
        streetNumber:
          description: Discriminator used to identify the property on a street
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: '20'
        streetName:
          description: Name used to identify the street
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: Kingston Road
        locality:
          description: Name used to identify the area
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
        city:
          description: Name used to identify the town or city
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: Staines-Upon-Thames
        postcode:
          description: Postal code
          type: string
          minLength: 1
          maxLength: 12
          readOnly: true
          example: TW184LG
        country:
          description: Name used to identify the country
          type: string
          minLength: 1
          maxLength: 50
          readOnly: true
          example: UK
        subAddress:
          $ref: '#/components/schemas/SubAddress'
    SubAddress:
      description: More specific definition of a property within an urban area.
      type: object
      readOnly: true
      required:
        - unitNumber
      properties:
        name:
          description: Identifying name of the sub unit
          type: string
          minLength: 1
          maxLength: 100
          example: Strategic Imperatives
        unitNumber:
          description: Discriminator used to identify the sub unit
          type: string
          minLength: 1
          maxLength: 100
          example: Floor 3
    Contact:
      description: Represents a contact available at the given site/address.
      type: object
      required:
        - name
        - phoneNumber
      properties:
        name:
          description: Contact name
          type: string
          minLength: 1
          maxLength: 100
          example: John Smith
        email:
          description: Contact email address (if available)
          type: string
          pattern: ^\S{1,64}@\S{2,254}$
          example: john@smith.com
        phoneNumber:
          description: Contact phone number
          type: string
          pattern: ^\+?[\d\s\-#]{8,50}$
          example: 01234 567890
    SupplierId:
      description: System identifier for a supplier on the Fibre Cafe
      type: string
      pattern: ^\w{1,20}$
      example: SUPPLIER2
    CreateServiceTest:
      description: >
        The service test request specifies the active service to be tested and
        the type of problem being experienced/reason

        for the test.
      type: object
      required:
        - id
        - serviceId
        - serviceSpecification
        - problemType
      properties:
        id:
          description: >-
            Unique identifier for this service test request (generated by the
            Fibre Cafe)
          type: number
          minimum: 1
          example: 23467
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        problemType:
          $ref: '#/components/schemas/ServiceProblemType'
    ServiceTest:
      allOf:
        - type: object
          properties:
            supplierReference:
              description: >-
                Unique reference identifying this service test (where
                applicable)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
        - $ref: '#/components/schemas/CreateServiceTest'
    ServiceProblemCharacteristic:
      description: >-
        A generic characteristic object to support extendable data sets. All
        characteristics will be referenced in developer documentation.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the characteristic
          type: string
          minLength: 1
          maxLength: 50
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
    CreateServiceProblem:
      description: >-
        Represents a request to raise a new service problem on an existing
        active service.
      type: object
      required:
        - id
        - problemType
        - problemText
        - serviceId
        - serviceSpecification
        - characteristics
        - primaryContact
        - notes
      properties:
        id:
          description: >-
            Unique identifier for this service problem request (generated by the
            Fibre Cafe)
          type: number
          minimum: 1
          example: 23467
        problemType:
          $ref: '#/components/schemas/ServiceProblemType'
        problemText:
          description: The description of problem being raised as defined by the end user.
          type: string
          minLength: 10
          maxLength: 80
          example: The service keeps dropping between 6pm and 9pm every evening.
        serviceId:
          description: Identifier of an existing live service
          type: string
          minLength: 1
          maxLength: 50
          example: SI2345432345345
        serviceSpecification:
          $ref: '#/components/schemas/ServiceSpecification'
        address:
          $ref: '#/components/schemas/AddressIdentifier'
        serviceTestId:
          description: >-
            Unique identifier for a current service test performed prior to
            raising the service problem (generated by the Fibre Cafe)
          type: number
          minimum: 1
          example: 23467
        serviceTestReference:
          description: >-
            The unique supplier reference of a service test that has been
            performed against the service prior to raising the service problem.
          type: string
          pattern: ^[A-Z0-9_]{5,25}
          example: TEST_233827673
        characteristics:
          description: List of characteristics providing context on the problem
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ServiceProblemCharacteristic'
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the reserved appointment (if applicable)
          type: number
          minimum: 1
          example: 345
        appointmentReservationReference:
          description: >-
            Unique reference identifying the appointment - supplier reference
            (if applicable)
          type: string
          minLength: 1
          maxLength: 50
          example: A234X
        parentServiceProblemId:
          description: >-
            Unique reference for an issue that is believed to be related, for
            example a multiline network outage
          type: number
          minimum: 1
          example: 12345
        parentServiceProblemReference:
          description: >-
            Unique reference identifying the parent problem - supplier reference
            (if applicable)
          type: string
          pattern: ^[A-Z0-9_]{1,25}
          example: SI_RE23380000
        hazards:
          description: Hazard information about the site where the service will be restored
          type: string
          example: Hazardous materials stored on site
          minLength: 1
          maxLength: 1000
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service will be
            restored
          type: string
          example: Restricted access
          minLength: 1
          maxLength: 1000
        notes:
          description: Notes about the problem which are required by the supplier.
          type: string
          example: Lorem ipsum dolor sit amet...
          minLength: 1
          maxLength: 1000
    ServiceProblem:
      allOf:
        - type: object
          required:
            - status
          properties:
            status:
              $ref: '#/components/schemas/ServiceProblemStatus'
            supplierReference:
              description: >-
                Unique reference identifying this service problem (where
                applicable)
              type: string
              minLength: 1
              maxLength: 50
              example: A123X
        - $ref: '#/components/schemas/CreateServiceProblem'
    Characteristic:
      description: A characteristic or attribute of the associated object type.
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: Name of the object characteristic
          type: string
          pattern: ^[A-Z_]{5,50}
          example: END_USER_CPE
        value:
          description: Value for this characteristic
          type: string
          minLength: 1
          maxLength: 50
          example: Zyzel DX3301
    ServiceProblemAmendment:
      description: >-
        Represents a request for amendment(s) to existing inflight service
        problem
      required:
        - id
        - serviceProblemId
      properties:
        id:
          description: >-
            Unique identifier for this service problem amendment request
            (generated by the Fibre Cafe)
          type: number
          minimum: 1
          example: 23467
        supplierReference:
          description: >-
            Unique reference identifying this service problem amendment -
            generated by the supplier
          type: string
          pattern: ^[A-Z0-9_]{5,25}
          example: SI_RE233827673
        serviceProblemId:
          description: Unique reference identifying the service problem to be amended
          type: number
          minimum: 1
          example: 12356
        supplierServiceProblemReference:
          description: Unique reference generated by the supplier for the service problem
          type: string
          pattern: ^[A-Z0-9_]{5,25}
          example: SK_PRO233827673
        problemText:
          description: The description of problem being raised as defined by the end user.
          type: string
          minLength: 10
          maxLength: 80
          example: The service keeps dropping between 6pm and 9pm every evening.
        escalationRequest:
          description: Request to escalate the problem based on agreed SLA's.
          type: boolean
          example: true
        characteristics:
          description: List of characteristics providing context on the problem
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/Characteristic'
        primaryContact:
          $ref: '#/components/schemas/Contact'
        secondaryContact:
          $ref: '#/components/schemas/Contact'
        appointmentReservationId:
          description: Unique identifier for the reserved appointment (if applicable)
          type: number
          minimum: 1
          example: 345
        appointmentReservationReference:
          description: >-
            Unique reference identifying the appointment - supplier reference
            (if applicable)
          type: string
          minLength: 1
          maxLength: 50
          example: A234X
        hazards:
          description: Hazard information about the site where the service will be restored
          type: string
          example: Hazardous materials stored on site
          minLength: 1
          maxLength: 1000
        onSiteRestrictions:
          description: >-
            Information about restrictions on the site where the service will be
            restored
          type: string
          example: Restricted access
          minLength: 1
          maxLength: 1000
        notes:
          description: >-
            Notes about the problem which are required by the supplier. This
            includes additional information that may be required
          type: string
          example: Lorem ipsum dolor sit amet...
          minLength: 1
          maxLength: 1000
    ServiceProblemCancellation:
      description: >-
        Represents a request to cancel an inflight service problem. This will
        need to be approved and confirmed or rejected by the supplier.
      type: object
      required:
        - id
        - serviceProblemId
        - supplierServiceProblemReference
        - reasonCode
      properties:
        id:
          description: >-
            Unique reference identifying this service problem cancellation
            request (generated by the Fibre Cafe)
          type: number
          minimum: 1
          example: 123365
        supplierReference:
          description: >-
            Unique reference identifying this service problem cancellation
            request as generated by the supplier
          type: string
          readOnly: true
          pattern: ^[A-Z0-9_]{5,25}
          example: SI_RE233827673
        serviceProblemId:
          description: Unique reference identifying the service problem to be cancelled
          type: number
          minimum: 1
          example: 12356
        supplierServiceProblemReference:
          description: Unique reference generated by the supplier for the service problem
          type: string
          pattern: ^[A-Z0-9_]{5,25}
          example: SK_PRO233827673
        reasonCode:
          $ref: '#/components/schemas/ServiceProblemCancellationReasonCode'
        text:
          description: >-
            Textual reason for cancellation - provides more context as
            applicable
          type: string
          minLength: 1
          maxLength: 1000
          example: Issue appears to have rectified itself.
    ServiceProblemResolution:
      description: Details of resolution to a service problem request.
      type: object
      required:
        - supplierReference
        - status
        - resolvedDate
        - resolutionDetails
      properties:
        supplierReference:
          description: >-
            Unique reference identifying this service problem resolution (as
            provided by supplier)
          type: string
          minLength: 1
          maxLength: 50
          example: '1234'
        status:
          $ref: '#/components/schemas/ServiceProblemResolutionStatus'
        resolvedDate:
          description: Date/time the problem was resolved by the supplier
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        closedDate:
          description: Date/time the problem was closed by the tenant or supplier
          type: string
          format: date-time
          example: '2022-01-10T09:00:00.000Z'
        resolutionDetails:
          $ref: '#/components/schemas/ResolutionDetails'
        slaViolation:
          description: Indicates if the resolution has violated the agreed SLAs
          type: array
          minItems: 1
          items:
            type: string
            pattern: ^[\w_]{5,50}
            example: EXCEEDED_SLA_TIME_TO_REPAIR
        tenantNotes:
          description: >-
            Text from the tenant giving notes or reason for rejection - as
            applicable
          type: string
          minLength: 1
          maxLength: 1000
          example: The problem was not resolved
    ResolutionCode:
      description: >-
        A code published on the developer portal to uniquely identify the
        problem resolution.
      type: string
      pattern: ^[\w_]{5,25}
      enum:
        - ACCESS_ISSUE
        - BACKHAUL_CORE_NETWORK
        - CUSTOMER_FAULT
        - CUSTOMER_FAULT_B_END
        - CUSTOMER_FAULT_EQUIPMENT
        - CUSTOMER_FAULT_MODEM
        - CUSTOMER_FAULT_WIRING
        - EXTERNAL_REIN
        - INTERNAL_REIN
        - LINE_TEST_NORMAL
        - NETWORK_CABLING
        - NETWORK_ISSUE
        - NETWORK_UPLIFT
        - NO_FAULT_FOUND
        - NOT_REPRODUCIBLE
        - OTHER
        - PLANNED_ENGINEERING_WORKS
        - PROBLEM_CANCELLED
        - SERVICE_RESTRICTION
        - SUPPLIER_CPE_ISSUE
      example: NETWORK_ISSUE
    ResolutionDetails:
      description: Details of resolution to a service problem request.
      type: object
      required:
        - resolutionCode
      properties:
        resolutionCode:
          $ref: '#/components/schemas/ResolutionCode'
        resolutionText:
          description: Detailed text regarding the problem resolution
          type: string
          maxLength: 256
        supplierCodes:
          description: Code(s) provided by the supplier regarding the resolution
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 50
            example: R9
        faultCode:
          description: Code(s) regarding the problem fault
          type: array
          minItems: 1
          items:
            type: string
            pattern: ^[\w_]{5,50}
            example: DAMAGED_ONT
    PatchServiceProblemResolution:
      description: >-
        Represents a request from the tenant to accept or reject an inflight
        service problem resolution.
      type: object
      required:
        - status
      properties:
        status:
          $ref: '#/components/schemas/ServiceProblemResolutionStatus'
        tenantNotes:
          description: >-
            Text from the tenant giving notes or reason for rejection - as
            applicable
          type: string
          minLength: 1
          maxLength: 1000
          example: Issue still persists
    Error:
      description: >
        Represents an error with code to denote origin/cause.


        - INVALID_REQUEST : Request was well-formed/syntactically correct but
        did not pass validation requirements

        - MALFORMED_REQUEST : Request was not valid JSON or missing mandatory
        parameters

        - NOT_AUTHORISED : User was not authenticated and/or authorised to use
        endpoint

        - NOT_FOUND : Requested entity was not found

        - SUPPLIER_FAULT : An unexpected problem originating from the supplier
        API implementation

        - NOT_IMPLEMENTED : The supplier has not implemented the endpoint
      type: object
      required:
        - uuid
        - code
        - messages
      properties:
        uuid:
          description: Unique identifier of this error - for tracing purposes
          type: string
          example: 87432dfb-2e47-4532-a1b7-4b113d48867d
        code:
          $ref: '#/components/schemas/ErrorCode'
        messages:
          description: Message describing the error
          type: array
          minItems: 1
          items:
            type: string
            example: e.g. Invalid value for field x - accepted values are y
    OrderStatus:
      description: >
        Order lifecycle adapted from TMF641 - order update events (KCIs) will be
        forwarded to

        the tenant as the order transitions from one state to the other.
      type: string
      readOnly: true
      enum:
        - REJECTED
        - ACKNOWLEDGED
        - IN_PROGRESS
        - PENDING
        - HELD
        - PENDING_AMENDMENT
        - PENDING_CANCELLATION
        - CANCELLED
        - FAILED
        - PARTIAL
        - COMPLETED
      example: PENDING_CANCELLATION
    SiteRole:
      description: The role of the site in an Ethernet connection
      type: string
      enum:
        - A-END
        - B-END
        - MULTI-POINT
    NoQuoteReason:
      description: Reason why a quote was not returned by the supplier
      type: string
      pattern: ^[A-Z_]{1,25}$
      example: OUT_OF_RANGE
    InstallationType:
      description: >-
        Installation is necessary and hence an appointment is required - type of
        installation necessary.
      type: string
      enum:
        - STANDARD
        - EXTENDED_STANDARD
        - NON_STANDARD
      example: STANDARD
    AppointmentPurpose:
      description: 'Purpose of the appointment : PROVIDE, REPAIR, MODIFY'
      type: string
      example: PROVIDE
    TimeslotClassification:
      description: Timeslot classification
      type: string
      enum:
        - WEEKDAY
        - WEEKDAY_AM
        - WEEKDAY_PM
        - WEEKDAY_EARLY
        - WEEKDAY_EVENING
        - SATURDAY
        - SATURDAY_AM
        - SATURDAY_PM
        - SATURDAY_EARLY
        - SATURDAY_EVENING
        - SUNDAY
        - SUNDAY_AM
        - SUNDAY_PM
        - SUNDAY_EARLY
        - SUNDAY_EVENING
      readOnly: true
      example: SATURDAY_AM
    ProvideOrderType:
      description: The type of order - new, (re)start, takeover, transfer or swap
      type: string
      enum:
        - NEW
        - START
        - TAKEOVER
        - TRANSFER
        - SWAP
    CeaseOrderType:
      description: The type of order - cease
      type: string
      enum:
        - CEASE
    ModifyOrderType:
      description: The type of order - modify
      type: string
      enum:
        - MODIFY
    OrderType:
      description: The type of order
      anyOf:
        - $ref: '#/components/schemas/ProvideOrderType'
        - $ref: '#/components/schemas/CeaseOrderType'
        - $ref: '#/components/schemas/ModifyOrderType'
    AvailabilityConstraintCode:
      description: |
        Service has availability with these constraints.
        - SURVEY_REQUIRED
        - BUSINESS_PARK
        - FEASIBILITY_CHECK
        - WAYLEAVE_REQUIRED
        - WAYLEAVE_OWNER
        - WAYLEAVE_SHARED
        - WAYLEAVE_PRIVATE
        - WAYLEAVE_UNADOPTED
        - WAYLEAVE_REFUSED
        - UNECONOMIC_LENGTH
        - UNECONOMIC_SURFACE
        - OTHER
      type: string
      pattern: ^[A-Z_]{1,25}
      example: WAYLEAVE_SHARED
    UnavailabilityReasonCode:
      description: |
        Reason why service is unavailable (hard LOC):

        - NOT_PLANNED
        - IN_PLANNING
        - UNDER_CONSTRUCTION
        - OUT_OF_OPTIC_RANGE
        - PROPERTY_AT_CAPACITY
        - WAYLEAVE_ISSUE
        - UNECONOMIC_LENGTH
        - UNECONOMIC_SURFACE
        - UNECONOMIC_OTHER
        - OTHER
      type: string
      pattern: ^[A-Z_]{1,25}
      example: OUT_OF_OPTIC_RANGE
    EngineerTasks:
      description: |
        Engineer tasks to be performed at installation appointment.

        - INSTALL_ROUTER
        - TEST_SINGLE_DEVICE
        - ADDITIONAL_CABLING
        - TEST_MULTIPLE_DEVICES
        - INSTALL_BBU
        - VOICE_REINJECTION
        - PROVE_IP_VOICE
        - ENSURE_TELECARE
      type: array
      items:
        type: string
        pattern: ^[A-Z_]{1,25}
        example: TEST_SINGLE_DEVICE
    CancellationReasonCode:
      description: |
        Codes representing reason for cancellation:

        - CUSTOMER_CHANGED_MIND
        - INSTALL_FAILED
        - NETWORK_ISSUE
        - NO_LONGER_REQUIRED
        - OTHER

        Reason codes for cancellation other (unsolicited cease):

        - NO_AUTHORISATION
        - CUSTOMER_NOT_AWARE
        - DELIBERATE_MISLEAD
        - PURCHASED_DIFFERENT_PRODUCT
        - END_USER_NOT_MOVING
      type: string
      pattern: ^[A-Z_]{1,30}
      example: CUSTOMER_CHANGED_MIND
    PortStatus:
      description: >-
        Specify if this port is active (takeover), stopped (restart) or not
        available (e.g. fault)"
      type: string
      enum:
        - ACTIVE
        - STOPPED
        - UNAVAILABLE
    ServiceType:
      description: >-
        The specified service type(s) for this request (e.g. BROADBAND,
        ETHERNET)
      type: string
      enum:
        - BROADBAND
        - ETHERNET
    ServiceProblemType:
      description: >
        Codes representing the type of problem being encountered by the end
        user:


        - OUTAGE

        - PERFORMANCE

        - STABILITY

        - SYNCHRONISATION

        - CUSTOMER

        - CPE
      type: string
      pattern: ^[A-Z_]{5,25}
      example: STABILITY
    ServiceProblemStatus:
      description: >-
        Service problem lifecycle adapted from TMF656 - update events (KCIs)
        will be sent from the supplier as the service problem transitions from
        one state to the other.
      type: string
      enum:
        - REJECTED
        - ACKNOWLEDGED
        - IN_PROGRESS
        - HELD
        - NETWORK_INCIDENT
        - PENDING_AMENDMENT
        - PENDING_CANCELLATION
        - CANCELLED
        - RESOLVED
        - COMPLETED
      example: ACKNOWLEDGED
    ServiceProblemCancellationReasonCode:
      description: |
        Codes representing reason for cancellation of the service problem:

        - ISSUE_RESOLVED
        - CUSTOMER_NETWORK_ISSUE
        - NO_LONGER_REQUIRED
        - OTHER
      type: string
      pattern: ^[A-Z_]{5,50}
      example: CUSTOMER_NETWORK_ISSUE
    ServiceProblemResolutionStatus:
      description: State model for service problem resolution.
      type: string
      enum:
        - REJECTED
        - ACCEPTED
      example: REJECTED
    ErrorCode:
      description: Fibre Cafe error codes
      type: string
      enum:
        - INVALID_REQUEST
        - MALFORMED_REQUEST
        - NOT_AUTHORISED
        - NOT_FOUND
        - NOT_IMPLEMENTED
        - SUPPLIER_FAULT
  securitySchemes:
    oauth2:
      description: >
        The Fibre Cafe can support a number of different authentication
        mechanisms e.g. OAuth2, Mutual TLS, Basic Auth.

        We recommend the industry standard [OAuth 2.0
        protocol](https://oauth.net/2/) client credentials flow where possible.
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: /token
          scopes: {}
