openapi: 3.1.0
info:
  version: ''
  title: CityFibre - Ticketing API
  termsOfService: https://www.cityfibre.com
  contact:
    name: API Development Team
    email: apiteam@cityfibre.com
    url: https://www.cityfibre.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  x-logo:
    url: https://cdn.cityfibre.com/Interface/logo_blue.svg
  description: "# Introduction\n\nThis documentation provides information on the Ticketing API and how to access it.\n\n**Please note:**\n\n* Ticket requests for multiple ServiceID’s at the same time is not currently catered for.\n\n* When Tickets are raised, they will then be handled by CityFibre, and updates will be provided to a previously configured endpoint provided by the Ticket **Reporter**.\n\n* In this document, we use **Buyer** and **Supplier** for the Service Provider / CityFibre respectively and Reporter as the person within the **Buyers** Organisation. \n\n* This document describes the messages which can pass between **Buyer** and **Supplier**, and the various status changes and updates for ticket requests throughout the process.\n\n* We recommend that you always perform the **Supplier** Service Diagnostic request before you raise a Ticket, this will ensure the **Buyer** is not charged for faults on their own network. You can find the Service Diagnostics API document <a href=\"https://service-diagnostics.docs.cityfibre.com\">here</a>.\n \n# Design Overview\n\nSee diagram Ticketing_API_v1.1 for an overview of the flow.\n\n<figure align=\"center\">\n  <img alt=\"Ticketing API v1.1\" src=\"/Ticketing_API_v1.1.jpg\" />\n  <figcaption style=\"font-size: 12px\">Ticketing API v1.1</figcaption>\n</figure>\n\n1. The **Buyer** detects or is informed of a problem on the network.   **Reporter** gathers any relevant information. The fault is then determined to be within **Suppliers** network.\n\n2. The **Reporter** on the **Buyer** side can call the API _addFaultReport_ which will validate the details and the ServiceID, once the issue is confirmed a Ticket is raised automatically and then progresses through the workflow until it is resolved.  \n\n3. The **Reporter** on the **Buyer** side initiates the process by calling the ticketing API (_addFaultReport_) to raise a ticket with the **Supplier**. This ticket should include all relevant information that could be gathered at the time and can include the details for the files to upload.\n\n    a. The ticketing API responds with the message ID and status “Pending”.\n    \n    b. The ticketing API may also respond with a status “Rejected” if the ticket is missing mandatory information or the Service ID is not valid.\n\n    c. The ticketing API may also respond with a status “Rejected” if the fault detail type is **\"Service Outage\"** _(TLOS: Total Loss Of Service)_ **without** an Appointment Reservation Key or any other types _(Non-TLOS)_ **with** an Appointment Reservation Key.\n\n4. The **Supplier** stores the ticket information.\n\n5. Once validated and stored, a notification is sent to the **Buyer** saying that the ticket status is “Accepted” and has been successfully created. This notification also includes the _maintainerFaultReference_, which is used along with the _buyerFaultReference_ to identify the ongoing fault.  Please note the change from ‘Pending’ to ‘Accepted’ is almost instant if no issues are identified.\n\n6. At this point the **Suppliers** Triage is performed on the Service and the fault details are confirmed to the **Buyer** in the Triage section of the XML using the _NotifyFaultReportUpdate_.  If a fault is found on the **Suppliers** network, it continues in the Workflow. \n\n7. When there is more information available, the **Supplier** can add this information to the ticket.  A notification will be sent to the **Buyer’s** notification endpoint containing a full update using the _notifyFaultReportUpdate_ API.\n\n8. If the **Reporter** finds more information, they too can add it using the _amendFaultReport_ API.  The **Buyer** will get a confirmation message for each amendment received by the **Supplier**.\n\n9. The **Supplier** continues to update the **Buyer** with ticket progress until resolved.\n\n10. When the ticket is deemed resolved, **Supplier** will update the ticket status to “Resolved”. \n\n11. The **Buyer** should respond with a _resolveResponse_ either accepting or rejecting the solution. If the resolution is rejected, the ticket will be re-opened with status “Re-Opened”.\n\n12. Once confirmed ‘Resolved’ the ticket can be closed.\n\n13. If no reply is received from the **Buyer** after a fault is resolved for 48 hours, then the fault status is changed to ‘Closed’ and it is automatically Accepted from the **Suppliers** standpoint.\n\n\n# Contacting the Customer\n\nIf the **Supplier** needs more information from either the **Buyer** or the **Buyer’s** End User the Ticket is put into an ‘on-hold’ status that will pause the SLA.  The reasons for pausing are only when delays are out of the Suppliers hands.\n\nTo contact the **Buyer’s** End User, the **Suppliers** NOC (Network Operational Centre) team makes the appointment, they would call the Customer and make arrangements if a site visit is needed.  They follow the process of leaving a message if possible and a further two call attempts.  Once the information is received or the appointment is booked the SLA can be aligned to start again and the Ticket status will be moved back to ‘In Progress’.\n\n\n# Accessing the API\n\nThe API is accessed via HTTPS. Calls are made by POST, sending XML as the HTTP body.\n\nMessages are exchanged using SOAP exchanges over HTTPS POST, where the request is in the POST body and the response is in the HTTP response body. Messages are encapsulated in a SOAP envelope using Document/Literal style following WS-Basic Profile 1.0.\n\n```xml\n        <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n            <soap:Body>\n                 ... single request or response element goes here ...\n            </soap:Body>\n        </soap:Envelope>\n```\n\n## Authentication\n\nAuthentication is by means of HTTPS client certificate. It is also restricted to pre-agreed source IP addresses.\n\n## Integration Environments\nCityFibre provides two pre-production environments for the **Buyer** to integrate with, to allow the **Buyer** to test the API endpoint before going live.\n\nBelow are the details for these environments:\n\n**CFSIT:** [https://api-gw.cityfibre.com:41223/cfsit/api2](https://api-gw.cityfibre.com:41223/cfsit/api2)\n\n**CFStaging:** [https://api-gw.cityfibre.com:41223/cfstaging/api2](https://api-gw.cityfibre.com:41223/cfstaging/api2)\n\n**Production:** [https://api-gw.cityfibre.com:41223/prod/api2](https://api-gw.cityfibre.com:41223/prod/api2)\n\n<h2>Ticketing Notification End Point</h2>\n\n**Buyer** must provide the endpoint to receive Ticket update notifications.\n\n# Closure Code Reference\n| Code | Description                            |\n| --- |----------------------------------------|\n|FR| \tFault Resolved                        |\n|FNR| \tFault Not Resolved                    |\n|HAZ| \tSite Unsafe                           |\n|NA| \tNo access                             |\n|NAPUV| \tNo Access Possible Hazard             |\n|ASQ| \tSales Query                           |\n|NDT| \tNo dial tone                          |\n|UNF| \tUnforeseen Circumstance e.g. Asbestos |\n|MBORC| \tMatters Beyond Reasonable Control     |\n|FTA| \tFailed to Attend                      |\n|SREQ| \tService Request                       |"
servers:
  - url: https://api-gw.cityfibre.com:41223/prod/api2
    description: Main (production) server
  - url: https://api-gw.cityfibre.com:41223/cfstaging/api2
    description: CFStaging server
  - url: https://api-gw.cityfibre.com:41223/cfsit/api2
    description: CFSit server
tags:
  - name: Appointments
    description: >
      The buyer can query appointment availability, reserve an appointment and
      include the reservation key in the order request.

      If this is not done, the order will go into a waiting state and not
      progress, the buyer will need to reserve an appointment and then amend the
      order to include the appointment reservation key before the order can
      complete.

      Reappoint is an additional query and reserve, then an amend with the new
      CAMS ID on the appointment reservation key field.

      # Appointing flow


      Where the ticketing flow says "get appointment info" this flow describes
      all the appointment related steps. 


      <figure align="center">
        <img alt="AppointingDiagram" src="https://api.redocly.com/registry/assets/cityfibre/Ticketing%20API/v1/AppointingDiagram.jpg" />
        <figcaption style="font-size: 12px">AppointingDiagram</figcaption>
      </figure>
x-tagGroups:
  - name: API
    tags:
      - Appointments
      - Fault Report
      - Resolve Response
      - Request Update
  - name: Webhooks
    tags:
      - FaultReport
      - Appointment
      - Amendment
  - name: Files
    tags:
      - XSD File
      - Revision History
paths:
  /queryAppointmentAvailability:
    post:
      summary: Query Appointment Availability
      description: >-
        To check the availability for an appointment on a given location,
        timeframe, and product, the buyer should send a request containing a
        **UPRN**.


        The seller is then going to respond with detailed information about
        available appointment slots.
      operationId: queryAppointmentAvailability
      security:
        - Certificate: []
      tags:
        - Appointments
      requestBody:
        $ref: '#/components/requestBodies/queryAppointmentAvailabilityRequest'
      responses:
        '200':
          $ref: '#/components/responses/queryAppointmentAvailabilityResponse'
        '400':
          $ref: '#/components/responses/failedSchemaValidation'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/unauthenticated'
  /reserveAppointment:
    post:
      summary: Reserve Appointment
      description: >-
        In order to reserve an appointment, the buyer should provide the UPRN,
        product and the appointment slot that they desire to the seller.
      operationId: reserveAppointment
      security:
        - Certificate: []
      tags:
        - Appointments
      requestBody:
        $ref: '#/components/requestBodies/reserveAppointmentRequest'
      responses:
        '200':
          $ref: '#/components/responses/reserveAppointmentResponse'
        '400':
          $ref: '#/components/responses/failedSchemaValidation'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/unauthenticated'
  /addFaultReport:
    post:
      summary: Add a fault report
      description: |
        Creates a new fault Report.
      operationId: receivedFaultReportRejected.yaml
      security:
        - Certificate: []
      tags:
        - Fault Report
      requestBody:
        $ref: '#/components/requestBodies/addFaultReport'
      responses:
        '201':
          $ref: '#/components/responses/receivedFaultReportPending'
        '400':
          $ref: '#/components/responses/receivedFaultReportRejectedNotFound'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/receivedFaultReportRejectedAppointment'
        '500':
          $ref: '#/components/responses/brokenXML'
  /amendFaultReport:
    post:
      summary: Amend a fault report
      description: |
        Amend a Fault Report.
      operationId: amendFaultReport
      security:
        - Certificate: []
      tags:
        - Fault Report
      requestBody:
        $ref: '#/components/requestBodies/amendFaultReport'
      responses:
        '200':
          $ref: '#/components/responses/receivedAmendFaultReport'
        '400':
          $ref: '#/components/responses/receivedAmendFaultReportErrors'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/unauthenticated'
        '500':
          $ref: '#/components/responses/brokenXML'
  /requestFaultReportUpdate:
    post:
      summary: Request fault report update
      description: Request an update from the Supplier.
      operationId: requestFaultReportUpdate
      security:
        - Certificate: []
      tags:
        - Request Update
      requestBody:
        $ref: '#/components/requestBodies/requestFaultReportUpdate'
      responses:
        '200':
          $ref: '#/components/responses/receivedRequestFaultReportUpdate'
        '400':
          $ref: '#/components/responses/receivedRequestFaultReportUpdateErrors'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/unauthenticated'
        '500':
          $ref: '#/components/responses/brokenXML'
  /resolveResponse:
    post:
      summary: Report the response
      description: Reporting an Accept or Reject status from the Fault Report.
      operationId: resolveResponse
      security:
        - Certificate: []
      tags:
        - Resolve Response
      requestBody:
        $ref: '#/components/requestBodies/resolveResponse'
      responses:
        '200':
          $ref: '#/components/responses/receivedResolveResponse'
        '400':
          $ref: '#/components/responses/receivedResolveResponseErrors'
        '401':
          $ref: '#/components/responses/unauthorized'
        '403':
          $ref: '#/components/responses/unauthenticated'
        '500':
          $ref: '#/components/responses/brokenXML'
  /faultReport.txt:
    get:
      summary: Get the XSD for the Fault Report
      operationId: getFaultReportXSD
      security: []
      servers:
        - url: https://ticketing.docs.cityfibre.com/Ticketing API/v1
          description: Get the XSD schema
      description: |
        <button style="background-color: rgb(0, 101, 251) color: white">
          <a target="_blank" href="https://ticketing.docs.cityfibre.com/faultReport.txt?download=true" download>
            Download XSD
          </a>
        </button>
      tags:
        - XSD File
      x-codeSamples:
        - lang: curl
          label: XSD
          source: >-
            <?xml version="1.0" encoding="UTF-8"?>

            <xs:schema elementFormDefault="qualified"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">
                <xs:import namespace="http://schemas.xmlsoap.org/soap/envelope/" schemaLocation="http://schemas.xmlsoap.org/soap/envelope/" />

                <xs:element name="addFaultReport" type="faultReportType"/>
                <xs:element name="amendFaultReport" type="amendFaultReportType"/>
                <xs:element name="notifyFaultReportUpdate" type="faultReportType"/>
                <xs:element name="requestFaultReportUpdate" type="updateRequestType"/>
                <xs:element name="receivedFaultReport" type="receivedFaultReportType"/>
                <xs:element name="receivedAmendFaultReport" type="receivedFaultReportType"/>
                <xs:element name="resolveResponse" type="resolveResponseType"/>
                <xs:element name="receivedRequestFaultReportUpdate" type="genericResponseType"/>
                <xs:element name="receivedResolvedResponse" type="genericResponseType"/>

                <!-- Used in responses by either the Buyer or Maintainer.
                     messageId will echo the message the response refers to.
                     The responseCode is as defined in the specification:
                      - 2xx success
                      - 4xx failure
                -->
                <xs:complexType name="genericResponseType">
                    <xs:all>
                        <xs:element name="apiVersion" type="xs:string"/>
                        <xs:element name="buyerIdentifier" type="buyerIdentifier" />
                        <xs:element name="sentAt" type="xs:dateTime" />
                        <xs:element name="messageId" type="xs:string"/>
                        <xs:element name="responseCode" type="xs:integer"/>
                        <xs:element minOccurs="0" name="errorMessage" type="xs:string"/>
                    </xs:all>
                </xs:complexType>

                <!-- Sent by the buyer to request a full update of the fault state
                     The response will be a basic "response" element; confirming receipt.
                     The update from the maintainer will be asynchronous via notification
                -->
                <xs:complexType name="updateRequestType">
                    <xs:all>
                        <xs:element name="apiVersion" type="nonEmptyString"/>
                        <xs:element name="buyerIdentifier" type="buyerIdentifier"/>
                        <xs:element name="sentAt" type="xs:dateTime"/>
                        <xs:element name="messageId" type="nonEmptyString"/>
                        <xs:element name="maintainerFaultReference" type="nonEmptyString"/>
                        <xs:element name="buyerFaultReference" type="nonEmptyString"/>
                    </xs:all>
                </xs:complexType>



                <!-- Sent from the maintainer to the buyer in response to a new report.
                     The messageId will match the received messageId.
                -->
                <xs:complexType name="receivedFaultReportType">
                    <xs:all>
                        <xs:element name="apiVersion" type="xs:string"/>
                        <xs:element name="buyerIdentifier" type="buyerIdentifier" />
                        <xs:element name="sentAt" type="xs:dateTime" />
                        <xs:element maxOccurs="1" name="messageId" type="xs:string"/>
                        <xs:element maxOccurs="1" name="buyerFaultReference" type="xs:string"/>
                        <xs:element maxOccurs="1" name="status" type="faultStateType" />
                        <xs:element maxOccurs="1" name="responseCode" type="xs:integer"/>
                        <xs:element maxOccurs="1" minOccurs="0" name="errorMessage" type="xs:string"/>
                        <xs:element minOccurs="0" name="attachments" type="attachmentsType"/>
                    </xs:all>

                </xs:complexType>

                <!-- Sent from the buyer to the maintainer in response to a "resolved" update
                     Acknowledged via a "receivedMessage" response.
                     Ticket will be updated asynchronously in response.
                -->
                <xs:complexType name="resolveResponseType">
                    <xs:all>
                       <xs:element name="apiVersion" type="nonEmptyString"/>
                        <xs:element name="buyerIdentifier" type="buyerIdentifier"/>
                        <xs:element name="sentAt" type="xs:dateTime"/>
                        <xs:element name="messageId" type="nonEmptyString"/>
                        <xs:element minOccurs="0" name="resolveAccepted" type="xs:boolean"/>
                        <xs:element name="buyerFaultReference" type="nonEmptyString"/>
                        <xs:element minOccurs="0" name="maintainerFaultReference" type="xs:string"/>
                        <xs:element minOccurs="0" name="rejectedReason" type="xs:string"/>
                    </xs:all>
                </xs:complexType>

                <xs:complexType name="faultReportType">
                    <xs:all>
                        <xs:element name="apiVersion" type="nonEmptyString"/>
                        <xs:element name="buyerIdentifier" type="buyerIdentifier"/>
                        <xs:element minOccurs="0" name="sentAt" type="xs:dateTime"/>
                        <xs:element name="messageId" type="nonEmptyString"/>
                        <xs:element minOccurs="0" name="reportDateTime" type="xs:dateTime"/>
                        <xs:element minOccurs="0" name="reporterContactDetails" type="contactDetailsType"/>
                        <xs:element minOccurs="0" name="endUserContactDetails" type="contactDetailsType"/>
                        <xs:element name="serviceAffected" type="nonEmptyString"/>
                        <xs:element name="buyerFaultReference" type="nonEmptyString"/>
                        <xs:element minOccurs="0" name="maintainerFaultReference" type="xs:string"/>
                        <xs:element minOccurs="0" name="parentFaultReference" type="xs:string"/>
                        <xs:element minOccurs="0" name="faultDetails" type="faultDetailsType"/>
                        <xs:element minOccurs="0" name="updates" type="faultReportUpdatesType"/>
                        <xs:element minOccurs="0" name="comment" type="commentType"/>
                        <xs:element minOccurs="0" name="attachments" type="attachmentsType"/>
                        <xs:element minOccurs="0" name="priorityLevel" type="xs:integer"/>
                        <xs:element minOccurs="0" name="lateRepairNotification" type="lateRepairNotificationType"/>
                        <xs:element minOccurs="0" name="appointment" type="appointmentType"/>
                        <xs:element minOccurs="0" name="errorMessage" type="xs:string"/>
                        <xs:element minOccurs="0" name="resolveAccepted" type="xs:boolean"/>
                    </xs:all>
                </xs:complexType>

                <!-- For an amend, accept fields being left out. If missing, we assume it's unchanged. -->
                <xs:complexType name="amendFaultReportType">
                    <xs:all>
                        <xs:element name="apiVersion" type="nonEmptyString"/>
                        <xs:element name="buyerIdentifier" type="buyerIdentifier"/>
                        <xs:element name="sentAt" type="xs:dateTime"/>
                        <xs:element minOccurs="0" name="reportDateTime" type="xs:dateTime"/>
                        <xs:element name="messageId" type="nonEmptyString"/>
                        <xs:element minOccurs="0" name="reporterContactDetails" type="contactDetailsType"/>
                        <xs:element minOccurs="0" name="endUserContactDetails" type="contactDetailsType"/>
                        <xs:element minOccurs="0" name="serviceAffected" type="xs:string"/>
                        <xs:element name="buyerFaultReference" type="nonEmptyString"/>
                        <xs:element minOccurs="0" name="maintainerFaultReference" type="xs:string"/>
                        <xs:element minOccurs="0" name="parentFaultReference" type="xs:string"/>
                        <xs:element minOccurs="0" name="faultDetails" type="amendFaultDetailsType"/>
                        <xs:element minOccurs="0" name="updates" type="faultReportUpdatesType"/>
                        <xs:element minOccurs="0" name="comment" type="commentType"/>
                        <xs:element minOccurs="0" name="attachments" type="attachmentsType"/>
                        <xs:element minOccurs="0" name="appointment" type="appointmentType"/>
                        <xs:element minOccurs="0" name="priorityLevel" type="xs:integer"/>
                    </xs:all>
                </xs:complexType>

                <xs:complexType name="contactDetailsType">
                    <xs:choice maxOccurs="unbounded">
                        <xs:element minOccurs="0"  name="name"  type="xs:string"/>
                        <xs:element minOccurs="0"  name="phone"  type="xs:string"/>
                        <xs:element  minOccurs="0"  name="email"  type="xs:string"/>
                    </xs:choice>
                </xs:complexType>

                <xs:complexType name="faultDetailsType">
                    <xs:all>
                        <xs:element minOccurs="0"  name="description" type="xs:string"/>
                        <xs:element name="type" type="nonEmptyString" />
                        <xs:element minOccurs="0" name="status" type="faultStateType" />
                        <xs:element minOccurs="0" name="statusReason" type="xs:string" />
                        <xs:element name="faultStartTime" type="xs:dateTime"/>
                        <xs:element name="faultLocation" type="nonEmptyString"/>
                        <xs:element name="siteAccessDetails" type="nonEmptyString" />
                        <xs:element name="siteAccessContactDetails" type="contactDetailsType" />
                        <xs:element name="triageComplete" type="xs:boolean" />
                        <xs:element name="triageFindings" type="nonEmptyString" />
                        <xs:element minOccurs="0" name="missedAppointment" type="missedAppointmentType"/>
                    </xs:all>
                </xs:complexType>

                <xs:complexType name="amendFaultDetailsType">
                    <xs:all>
                        <xs:element minOccurs="0" name="description" type="xs:string" />
                        <xs:element minOccurs="0" name="type" type="xs:string" />
                        <xs:element minOccurs="0" name="status" type="faultStateType" />
                        <xs:element minOccurs="0" name="statusReason" type="xs:string" />
                        <xs:element minOccurs="0" name="faultStartTime" type="xs:dateTime"/>
                        <xs:element minOccurs="0" name="faultLocation" type="xs:string"/>
                        <xs:element minOccurs="0" name="siteAccessDetails" type="xs:string" />
                        <xs:element minOccurs="0" name="siteAccessContactDetails" type="contactDetailsType" />
                        <xs:element minOccurs="0" name="triageComplete" type="xs:boolean" />
                        <xs:element minOccurs="0" name="triageFindings" type="xs:string" />
                     </xs:all>
                </xs:complexType>

                <xs:simpleType name="nonEmptyString">
                    <xs:restriction base="xs:string">
                        <xs:whiteSpace value="collapse"/>
                        <xs:pattern value=".*\S.*"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:complexType name="attachmentsType">
                    <xs:sequence>
                        <xs:element name="attachment" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:all>
                                    <xs:element name="filename" type="xs:string"/>
                                    <xs:element minOccurs="0" name="url" type="xs:string"/>
                                    <xs:element minOccurs="0" name="uploaded" type="xs:boolean"/>
                                </xs:all>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>

                <xs:complexType name="faultReportUpdatesType">
                    <xs:sequence>
                        <xs:element name="update" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:all>
                                    <xs:element name="description" type="nonEmptyString"/>
                                    <xs:element minOccurs="0" name="updatedBy" type="updatedByType"/>
                                    <xs:element minOccurs="0" name="updatedTime" type="xs:dateTime"/>
                                </xs:all>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>

                <xs:simpleType name="updatedByType">
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="buyer"/>
                        <xs:enumeration value="seller"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:complexType name="commentType">
                    <xs:all>
                        <xs:element name="value" type="nonEmptyString"/>
                        <xs:element name="commentedBy" type="commentedByType"/>
                        <xs:element name="commentedTime" type="xs:dateTime"/>
                    </xs:all>
                </xs:complexType>

                <xs:simpleType name="commentedByType">
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="buyer"/>
                        <xs:enumeration value="seller"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="faultStateType">
                    <xs:restriction base="xs:string">
                         <xs:enumeration value="pending"/>
                        <xs:enumeration value="rejected"/>
                        <xs:enumeration value="accepted"/>
                        <xs:enumeration value="open"/>
                        <xs:enumeration value="re-opened"/>
                        <xs:enumeration value="in-progress"/>
                        <xs:enumeration value="resolved"/>
                        <xs:enumeration value="closed"/>
                        <xs:enumeration value="on-hold"/>
                        <xs:enumeration value="cancelled"/>
                    </xs:restriction>
                </xs:simpleType>

                <!-- Schema for Auto Comp for Repair Missed appointments & Late Repairs -->

                <xs:complexType name="lateRepairNotificationType">
                    <xs:all>
                        <xs:element minOccurs="0" maxOccurs="1" name="totalDelayInDays" type="totalDelayInDaysType" />
                        <xs:element minOccurs="0" maxOccurs="1" name="sellerDelayDays" type="sellerDelayDaysType" />
                        <xs:element minOccurs="0" maxOccurs="1" name="nonSellerDelayDays" type="nonSellerDelayDaysType" />
                        <xs:element minOccurs="0" maxOccurs="1" name="exclusions" type="exclusionsType" />
                    </xs:all>
                </xs:complexType>

                <xs:simpleType name="totalDelayInDaysType">
                    <xs:restriction base="xs:integer" />
                </xs:simpleType>

                <xs:simpleType name="sellerDelayDaysType">
                    <xs:restriction base="xs:integer" />
                </xs:simpleType>

                <xs:simpleType name="nonSellerDelayDaysType">
                    <xs:restriction base="xs:integer" />
                </xs:simpleType>

                <xs:complexType name="exclusionsType">
                    <xs:sequence>
                        <xs:element minOccurs="0" maxOccurs="unbounded" name="exclusion" type="exclusionType" />
                    </xs:sequence>
                </xs:complexType>

                <xs:complexType name="exclusionType">
                    <xs:all>
                        <xs:element minOccurs="1" maxOccurs="1" name="exclusionReason" type="exclusionReasonType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="numberOfDays" type="numberOfDaysType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="startDateTime" type="startDateTimeType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="endDateTime" type="endDateTimeType" />
                    </xs:all>
                </xs:complexType>

                <xs:simpleType name="exclusionReasonType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="5"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="numberOfDaysType">
                    <xs:restriction base="xs:integer" />
                </xs:simpleType>

                <xs:simpleType name="startDateTimeType">
                    <xs:restriction base="xs:dateTime"/>
                </xs:simpleType>

                <xs:simpleType name="endDateTimeType">
                    <xs:restriction base="xs:dateTime"/>
                </xs:simpleType>

                <xs:complexType name="missedAppointmentType">
                    <xs:all>
                        <xs:element minOccurs="1" maxOccurs="1" name="appointmentReservationKey" type="appointmentReservationKeyType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="appointmentDate" type="appointmentDateType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="appointmentStartTime" type="appointmentStartTimeType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="appointmentEndTime" type="appointmentEndTimeType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="sellerMissedAppointment" type="sellerMissedAppointmentType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="Amended" type="AmendedType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="Cancelled" type="CancelledType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="endUserMissedAppointment" type="endUserMissedAppointmentType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="endUserPreAgreed" type="endUserPreAgreedType" />
                        <xs:element minOccurs="1" maxOccurs="1" name="MBORC" type="MBORCType" />
                    </xs:all>
                </xs:complexType>

                <xs:complexType name="appointmentsType">
                    <xs:sequence>
                        <xs:element minOccurs="0" maxOccurs="unbounded" name="appointment" type="appointmentType" />
                    </xs:sequence>
                </xs:complexType>

                <xs:complexType name="appointmentType">
                    <xs:all>
                        <xs:element minOccurs="0" name="appointmentDate" type="appointmentDateType" />
                        <xs:element minOccurs="0" name="appointmentStartTime" type="appointmentStartTimeType" />
                        <xs:element minOccurs="0" name="appointmentEndTime" type="appointmentEndTimeType" />
                        <xs:element name="appointmentReservationKey" type="appointmentReservationKeyType" />
                        <xs:element minOccurs="0" name="appointmentConfirmationStatus" type="appointmentConfirmationStatusType" />
                        <xs:element minOccurs="0" name="appointmentCancelled" type="appointmentCancelledType" />
                        <xs:element minOccurs="0" name="appointmentClosureCode" type="appointmentClosureCodeType" />
                    </xs:all>
                </xs:complexType>

                <xs:simpleType name="appointmentConfirmationStatusType">
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Confirmed"/>
                        <xs:enumeration value="Failed"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="appointmentCancelledType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="36" />
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="appointmentReservationKeyType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="36" />
                    </xs:restriction>
                </xs:simpleType>

                 <xs:simpleType name="appointmentClosureCodeType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="36" />
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="appointmentDateType">
                    <xs:restriction base="xs:date"/>
                </xs:simpleType>

                <xs:simpleType name="appointmentStartTimeType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="5"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="appointmentEndTimeType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="5"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="sellerMissedAppointmentType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="AmendedType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="CancelledType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="endUserMissedAppointmentType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="endUserPreAgreedType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="MBORCType">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="1"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="buyerIdentifier">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="36" />
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="appointmentDate">
                    <xs:restriction base="xs:date"/>
                </xs:simpleType>

                <xs:simpleType name="appointmentStartTime">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="5"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="appointmentEndTime">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="5"/>
                    </xs:restriction>
                </xs:simpleType>

                <xs:simpleType name="appointmentReservationKey">
                    <xs:restriction base="xs:string">
                        <xs:maxLength value="36" />
                    </xs:restriction>
                </xs:simpleType>
            </xs:schema>
  /changeLog.txt:
    get:
      summary: Revision history for the Documentation
      operationId: getRevisionHistory
      security: []
      servers:
        - url: https://ticketing.docs.cityfibre.com/Ticketing API/v1
          description: Get the revision history for the documentation
      x-codeSamples:
        - lang: curl
          label: Curl
          source: |
            curl -X GET "http://127.0.0.1:4000/changeLog.txt"
        - lang: python
          label: Python
          source: |
            import requests
            url = "http://127.0.0.1:4000/changeLog.txt"
            response = requests.get(url)
            print(response.content.decode())
      description: >+
        #### Ten most recent changes made to these docs


        | Date       |
        Change                                                                      
        |

        |------------|------------------------------------------------------------------------------| 

        | 28/05/2025 | Update the 'type' attribute to 'Service Outage' in the
        add/amend fault example       |

        | 19/09/2024 | Corrected grammatical issues and spelling
        mistakes                                       |

        | 25/07/2024 | Added appointments to Notify Appointment
        Missed                                   |

        | 25/07/2024 | Added appointments to Notify Fault Report In Progress.
        Added appointment confirmation status, cancelld and closure code. Added
        open and canceled statuses                             |

        | 24/07/2024 | Updated optional fields, non-empty strings. Added
        'updates' and 'attachments' in fault
        repors                                                                            
        |

        | 12/04/2024 | Updated 40x and added 500 response schema for several
        requests           |

        | 09/04/2024 | Added notification for Fault cancellation and removed
        maintainerfault reference from notify fault report
        rejected                 |

        | 03/04/2024 | Removed unused certificate and request section from XSD
        component                          |

        | 27/03/2024 | Updated 400 response schema from amend
        fault                              |

        | 25/03/2024 | Fixed the 'appointment' tag for addfault and
        amendfault                         |


        #### Download full change log here:


        <button style="background-color: rgb(0, 101, 251) color: white">
          <a target="_blank" href="http://127.0.0.1:4000/changeLog.txt?download=true" download>
            Download Change Log
          </a>
        </button>

      tags:
        - Revision History
webhooks:
  /notifyAccepted:
    post:
      summary: Notify Fault Report Accepted
      description: |
        Update Buyer on whether the fault report has been accepted
      operationId: notifyFaultReportUpdateAccepted.yaml
      security:
        - Certificate: []
      tags:
        - FaultReport
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateAccepted'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyAmended:
    post:
      summary: Notify Fault Report Amended
      description: |
        Update Buyer on any amendments made to the fault report
      operationId: notifyFaultReportUpdateMissedAppointmentAmended.yaml
      security:
        - Certificate: []
      tags:
        - Amendment
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateAmended'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyAppointmentCancelled:
    post:
      summary: Notify Appointment Cancelled
      description: |
        Update Buyer if an appointment gets cancelled
      operationId: notifyFaultReportUpdateAppointmentCancelled.yaml
      security:
        - Certificate: []
      tags:
        - Appointment
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateAppointmentCancelled'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyAppointmentCompleted:
    post:
      summary: Notify Appointment Completed
      description: |
        Update Buyer when and how an appointment has been completed
      operationId: notifyFaultReportUpdateAppointmentCompleted.yaml
      security:
        - Certificate: []
      tags:
        - Appointment
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateAppointmentCompleted'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyAppointmentConfirmation:
    post:
      summary: Notify Appointment Confirmation
      description: |
        Update Buyer on confirmation status of appointment
      operationId: notifyFaultReportUpdateAppointmentConfirmation.yaml
      security:
        - Certificate: []
      tags:
        - Appointment
      requestBody:
        $ref: >-
          #/components/requestBodies/notifyFaultReportUpdateAppointmentConfirmation
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyCancelled:
    post:
      summary: Notify Fault Report Cancelled
      description: |
        Update Buyer when a fault report is cancelled
      operationId: notifyFaultReportUpdateCancelled.yaml
      security:
        - Certificate: []
      tags:
        - FaultReport
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateCancelled'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyClosed:
    post:
      summary: Notify Fault Report Closed
      description: |
        Update Buyer when a fault report is closed
      operationId: notifyFaultReportUpdateClosed.yaml
      security:
        - Certificate: []
      tags:
        - FaultReport
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateClosed'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyInProgress:
    post:
      summary: Notify Fault Report In Progress
      description: |
        Update Buyer when progress has been started on a fault report
      operationId: notifyFaultReportUpdateInProgress.yaml
      security:
        - Certificate: []
      tags:
        - FaultReport
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateInProgress'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyMissedAppointment:
    post:
      summary: Notify Appointment Missed
      description: |
        Update Buyer when and why an appointment is missed
      operationId: notifyFaultReportUpdateMissedAppointment.yaml
      security:
        - Certificate: []
      tags:
        - Appointment
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateMissedAppointment'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyOnHold:
    post:
      summary: Notify Fault Report On Hold
      description: |
        Update Buyer if a fault report is put on hold
      operationId: notifyFaultReportUpdateOnHold.yaml
      security:
        - Certificate: []
      tags:
        - FaultReport
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateOnHold'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyRejected:
    post:
      summary: Notify Fault Report Rejected
      description: |
        Update Buyer when and why the fault report is rejected
      operationId: notifyFaultReportUpdateRejected.yaml
      security:
        - Certificate: []
      tags:
        - FaultReport
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateRejected'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
  /notifyResolved:
    post:
      summary: Notify Fault Report Resolved
      description: |
        Update Buyer on the resolution of a ticket
      operationId: notifyFaultReportUpdateResolved.yaml
      security:
        - Certificate: []
      tags:
        - FaultReport
      requestBody:
        $ref: '#/components/requestBodies/notifyFaultReportUpdateResolved'
      responses:
        '200':
          $ref: '#/components/responses/notifyFaultReportUpdate'
components:
  securitySchemes:
    Certificate:
      type: mutualTLS
      description: MutualTLS Certificate
  schemas:
    message:
      type: object
      required:
        - messageId
        - correlationId
        - sentAt
      properties:
        messageId:
          type: string
          description: A unique ID to identify the message
          maxLength: 36
          example: b68b2cf4-475e-11e1-a92e-fb2ff6467c99
        correlationId:
          type: string
          description: >-
            A Correlation ID, also known as a Transit ID, is a unique identifier
            value that is attached to requests and messages that allow reference
            to a particular transaction or event chain
          maxLength: 36
          example: bac72cfa-475e-11e1-a92e-fb2ff6467c99
        sentAt:
          type: string
          description: The timestamp when the message has been sent
          format: date-time
          example: '2012-01-20T18:30:43Z'
      description: >-
        The meta-data of the request. It includes information regarding the
        message UUID, transaction ID and the sent timestamp
    buyer:
      type: object
      required:
        - buyerIdentifier
      properties:
        buyerIdentifier:
          type: string
          maxLength: 36
          example: SPDEV1
          description: Unique identifier of the buyer
        cfh:resellerId:
          type: string
          maxLength: 36
          example: BAQ
          description: >-
            Unique identifier of the reseller. Sourced from the Ofcom Reseller
            Identification List
      description: The Service Provider who consumes the service is the buyer
    seller:
      type: object
      required:
        - sellerIdentifier
      properties:
        sellerIdentifier:
          type: string
          maxLength: 36
          example: CITYFIBRE
          description: Unique identifier of the seller
      description: The Active Network Operator who provides the service is the seller
    addressKey:
      type: string
      example: 200004753569
      maxLength: 63
      description: Unique identifier of the address (UPRN)
    appointmentType:
      oneOf:
        - type: object
          title: Order
          properties:
            order:
              type: 'null'
        - type: object
          title: Fault
          properties:
            fault:
              type: 'null'
    queryAppointmentAvailabilityRequest:
      type: object
      required:
        - message
        - buyer
        - seller
        - addressKey
        - appointmentsFrom
        - appointmentType
        - cfh:productName
      description: >-
        Query if an address key has available appointments from a given date and
        time for a product
      properties:
        message:
          $ref: '#/components/schemas/message'
        buyer:
          $ref: '#/components/schemas/buyer'
        seller:
          $ref: '#/components/schemas/seller'
        addressKey:
          $ref: '#/components/schemas/addressKey'
        appointmentsFrom:
          type: string
          format: date
          description: Appointments in the future from this date
          maxLength: 10
          example: '2017-10-18'
        appointmentType:
          $ref: '#/components/schemas/appointmentType'
        cfh:productName:
          type: string
          description: Name of the Product
          maxLength: 254
          example: ftthl2r
          xml:
            name: cfh:productName
        cfh:reappointment:
          type: string
          description: >-
            Indicates whether the appointment is reappointing a previous
            appointment
          example: 'true'
          xml:
            name: cfh:reappointment
        cfh:projectReference:
          type: string
          maxLength: 80
          example: CST1234567
          xml:
            name: cfh:projectReference
    appointmentDate:
      type: string
      pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}.*$
      example: '2012-01-20'
      description: Date of the appointment
    appointmentStartTime:
      type: string
      maxLength: 5
      example: '08:00'
      description: Appointment start time
    appointmentEndTime:
      type: string
      maxLength: 5
      example: '08:00'
      description: Appointment end time
    appointmentSlot:
      type: object
      required:
        - appointmentDate
        - appointmentStartTime
        - appointmentEndTime
      properties:
        appointmentDate:
          $ref: '#/components/schemas/appointmentDate'
        appointmentStartTime:
          $ref: '#/components/schemas/appointmentStartTime'
        appointmentEndTime:
          $ref: '#/components/schemas/appointmentEndTime'
      description: Represents the appointment slot details (date, start time, end time)
    queryAppointmentAvailabilityAccepted:
      type: object
      required:
        - appointmentSlots
      properties:
        appointmentSlots:
          type: array
          items:
            type: object
            properties:
              appointmentSlot:
                $ref: '#/components/schemas/appointmentSlot'
    systemError:
      type: object
      properties:
        errorCode:
          type: string
          maxLength: 36
          description: Error Code
          example: CF-123-123
          readOnly: true
        errorMessage:
          type: string
          maxLength: 36
          description: Error Message
          example: Some failure
          readOnly: true
    validationFailure:
      type: object
      required:
        - validationFailureField
        - validationFailureMessage
      properties:
        validationFailureField:
          type: string
          maxLength: 63
          description: Validation Failure Field
          example: postcode
        validationFailureMessage:
          type: string
          maxLength: 255
          description: Validation Failure message
          example: Invalid Postcode
    validationFailures:
      type: array
      items:
        type: object
        properties:
          validationFailure:
            $ref: '#/components/schemas/validationFailure'
    errorOther:
      type: object
      required:
        - errorCode
        - errorMessage
      properties:
        errorCode:
          type: string
          maxLength: 36
          description: Error Code
          example: CF-123-123
          readOnly: true
        errorMessage:
          type: string
          maxLength: 36
          description: Error Message
          example: Some failure
          readOnly: true
    dialogueServiceRejected:
      oneOf:
        - title: SystemError
          properties:
            systemError:
              $ref: '#/components/schemas/systemError'
        - type: object
          title: ValidationFailures
          properties:
            validationFailures:
              $ref: '#/components/schemas/validationFailures'
        - type: object
          title: ErrorOther
          properties:
            errorOther:
              $ref: '#/components/schemas/errorOther'
    queryAppointmentAvailabilityResponse:
      oneOf:
        - type: object
          required:
            - message
            - buyer
            - seller
            - queryAppointmentAvailabilityAccepted
          properties:
            message:
              $ref: '#/components/schemas/message'
            buyer:
              $ref: '#/components/schemas/buyer'
            seller:
              $ref: '#/components/schemas/seller'
            queryAppointmentAvailabilityAccepted:
              $ref: '#/components/schemas/queryAppointmentAvailabilityAccepted'
          title: QueryAppointmentAvailabilityAccepted
        - type: object
          required:
            - message
            - buyer
            - seller
            - queryAppointmentAvailabilityRejected
          properties:
            message:
              $ref: '#/components/schemas/message'
            buyer:
              $ref: '#/components/schemas/buyer'
            seller:
              $ref: '#/components/schemas/seller'
            queryAppointmentAvailabilityRejected:
              $ref: '#/components/schemas/dialogueServiceRejected'
          title: QueryAppointmentAvailabilityRejected
    fault:
      type: object
      required:
        - faultcode
        - faultmessage
      properties:
        faultcode:
          type: string
          readOnly: true
          description: Code related to the fault
        faultmessage:
          type: string
          readOnly: true
          description: Name of the fault
        detail:
          type: string
          readOnly: true
          description: Details about the fault
    failedSchemaValidationResponse:
      required:
        - fault
      description: Failed Schema Validation Response
      properties:
        fault:
          $ref: '#/components/schemas/fault'
    unauthorizedResponse:
      required:
        - fault
      description: Unauthorized
      properties:
        fault:
          $ref: '#/components/schemas/fault'
    unauthenticatedResponse:
      required:
        - fault
      description: Unauthenticated
      properties:
        fault:
          $ref: '#/components/schemas/fault'
    reserveAppointmentRequest:
      type: object
      required:
        - message
        - buyer
        - seller
        - appointmentSlot
        - appointmentType
        - cfh:productName
        - cfh:addressKey
      properties:
        message:
          $ref: '#/components/schemas/message'
        buyer:
          $ref: '#/components/schemas/buyer'
        seller:
          $ref: '#/components/schemas/seller'
        appointmentSlot:
          $ref: '#/components/schemas/appointmentSlot'
        appointmentType:
          $ref: '#/components/schemas/appointmentType'
        cfh:productName:
          type: string
          maxLength: 254
          description: This is the product name
          example: ftthl2r
          xml:
            name: cfh:productName
        cfh:addressKey:
          type: string
          maxLength: 254
          description: The address key (UPRN)
          example: '123456789012'
          xml:
            name: cfh:addressKey
        cfh:reappointment:
          type: string
          description: >-
            Indicates whether the appointment is reappointing a previous
            appointment
          example: 'true'
          xml:
            name: cfh:reappointment
        cfh:projectReference:
          type: string
          maxLength: 80
          example: CST1234567
          xml:
            name: cfh:projectReference
    appointmentReservationKey:
      type: string
      maxLength: 36
      description: The unique key for appointment reservation
      example: EI7PBRU6TL8KN1YNGO8ICEUI0UDFE9M8
    appointmentAccepted:
      type: object
      required:
        - appointmentReservationKey
      properties:
        appointmentDate:
          $ref: '#/components/schemas/appointmentDate'
        appointmentStartTime:
          $ref: '#/components/schemas/appointmentStartTime'
        appointmentEndTime:
          $ref: '#/components/schemas/appointmentEndTime'
        appointmentReservationKey:
          $ref: '#/components/schemas/appointmentReservationKey'
        appointmentReservationValidUntil:
          type: string
          format: date-time
          description: Reservation until date
          example: '2012-01-20T18:30:43Z'
    reserveAppointmentAccepted:
      type: object
      required:
        - appointment
      properties:
        appointment:
          $ref: '#/components/schemas/appointmentAccepted'
    reserveAppointmentResponse:
      oneOf:
        - type: object
          required:
            - message
            - buyer
            - seller
            - reserveAppointmentAccepted
          properties:
            message:
              $ref: '#/components/schemas/message'
            buyer:
              $ref: '#/components/schemas/buyer'
            seller:
              $ref: '#/components/schemas/seller'
            reserveAppointmentAccepted:
              $ref: '#/components/schemas/reserveAppointmentAccepted'
          title: ReserveAppointmentAccepted
        - type: object
          required:
            - message
            - buyer
            - seller
            - reserveAppointmentRejected
          properties:
            message:
              $ref: '#/components/schemas/message'
            buyer:
              $ref: '#/components/schemas/buyer'
            seller:
              $ref: '#/components/schemas/seller'
            reserveAppointmentRejected:
              $ref: '#/components/schemas/dialogueServiceRejected'
          title: ReserveAppointmentRejected
    apiVersion:
      type: string
      pattern: .*\S.*
      maxLength: 36
      example: 1
      description: The API version
    buyer-2:
      type: string
      maxLength: 36
      example: SPDEV1
      description: Unique identifier of the buyer
    sentAt:
      type: string
      maxLength: 25
      example: '2018-06-09T11:15:17.0001Z'
      description: The time this message was sent out. ISO 8601 date format
      format: date-time
    messageId:
      type: string
      pattern: .*\S.*
      description: A message ID for correlation between requests and your response.
      maxLength: 36
      example: b68b2cf4-475e-11e1-a92e-fb2ff6467c99
    reportDateTime:
      type: string
      maxLength: 25
      example: '2018-06-09T11:15:17.0001Z'
      description: The time this report was sent in. ISO 8601 date format
      format: date-time
    phone:
      description: Phone number
      type: string
      format: test
      example: 7077111111
    email:
      description: Email address
      type: string
      format: test
      example: john.smith@example.com
    name:
      description: Name
      type: string
      format: test
      example: john smith
    contactDetails:
      type: object
      properties:
        phone:
          $ref: '#/components/schemas/phone'
          maxLength: 1000
        email:
          $ref: '#/components/schemas/email'
          maxLength: 1000
        name:
          $ref: '#/components/schemas/name'
          maxLength: 1000
    serviceAffected:
      type: string
      description: The service that is affected by the issue
      example: S21709
    buyerReference:
      type: string
      maxLength: 36
      example: SP-123ABC
      description: Reference of the buyer
    maintainerReference:
      type: string
      maxLength: 36
      example: TIC-DEV00027757
      description: >-
        Reference of any incident unclosed on this service, which was opened by
        the buyer
    parentReference:
      type: string
      maxLength: 36
      example: SP-456XYZ
      description: The buyer’s reference for a pre-existing related fault (if present)
    faultDetails:
      type: object
      properties:
        description:
          type: string
          description: Description of the fault
          maxLength: 4000
        type:
          type: string
          description: |
            | Incident Types    |
            | ----------------- |
            | Impaired Service  |
            | Service Outage    |
            | Performance Issue |
          maxLength: 100
        faultStartTime:
          type: string
          description: The time this fault started. ISO 8601 date format
          format: date-time
        faultLocation:
          type: string
          pattern: .*\S.*
          description: Location of the fault
          maxLength: 1000
        siteAccessDetails:
          type: string
          pattern: .*\S.*
          description: >-
            Do you have access to the site? If so, are there any details we’ll
            need to get in.
          maxLength: 1000
        siteAccessContactDetails:
          $ref: '#/components/schemas/contactDetails'
        triageComplete:
          type: boolean
          description: Whether triage completed
        triageFindings:
          type: string
          pattern: .*\S.*
          description: The response from a prior diagnostics call
          maxLength: 1000
    appointment:
      type: object
      required:
        - appointmentReservationKey
      properties:
        appointmentDate:
          $ref: '#/components/schemas/appointmentDate'
        appointmentStartTime:
          $ref: '#/components/schemas/appointmentStartTime'
        appointmentEndTime:
          $ref: '#/components/schemas/appointmentEndTime'
        appointmentReservationKey:
          $ref: '#/components/schemas/appointmentReservationKey'
    priorityLevel:
      type: integer
      example: 1
      description: The priority level
    errorMessage:
      type: object
      maxLength: 36
      description: Error Message
      example: Some failure
    Updates:
      properties:
        description:
          type: string
          description: Description of the update
        updatedBy:
          type: string
          description: Filled in by the API
        updatedTime:
          type: string
          description: Filled in by the API
    attachments:
      type: array
      items:
        properties:
          attachment:
            type: object
            required:
              - filename
            properties:
              filename:
                type: string
                description: Name of the attachment
              url:
                type: string
                description: URL to the attachment
              uploaded:
                type: boolean
                description: Determines if the attachment is uploaded
    addFaultReport:
      description: Creates a new fault Report.
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - serviceAffected
        - buyerFaultReference
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          $ref: '#/components/schemas/serviceAffected'
          pattern: .*\S.*
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
          pattern: .*\S.*
        maintainerFaultReference:
          $ref: '#/components/schemas/maintainerReference'
        parentFaultReference:
          $ref: '#/components/schemas/parentReference'
        faultDetails:
          $ref: '#/components/schemas/faultDetails'
        appointment:
          $ref: '#/components/schemas/appointment'
        priorityLevel:
          $ref: '#/components/schemas/priorityLevel'
        errorMessage:
          $ref: '#/components/schemas/errorMessage'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
        attachments:
          $ref: '#/components/schemas/attachments'
    status:
      type: string
      maxLength: 36
      example: up
      description: Status of service
    responseCode:
      type: integer
      description: Response code
      example: '200'
    receivedFaultReportPending:
      description: some description
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - buyerFaultReference
        - status
        - responseCode
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
        status:
          $ref: '#/components/schemas/status'
        responseCode:
          $ref: '#/components/schemas/responseCode'
        attachments:
          $ref: '#/components/schemas/attachments'
    receivedFaultReportRejectedNotFound:
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - buyerFaultReference
        - status
        - responseCode
        - errorMessage
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
        status:
          $ref: '#/components/schemas/status'
        responseCode:
          $ref: '#/components/schemas/responseCode'
        errorMessage:
          description: >-
            The maintainerFaultReference is the reference of the fault report in
            the maintainer's system.
          $ref: '#/components/schemas/errorMessage'
    receivedFaultReportRejectedAppointment:
      oneOf:
        - type: object
          $ref: '#/components/schemas/unauthenticatedResponse'
          title: Unauthenticated
        - type: object
          required:
            - apiVersion
            - buyerIdentifier
            - sentAt
            - messageId
            - buyerFaultReference
            - status
            - responseCode
            - errorMessage
          title: Total Loss Of Service Without An Appointment
          description: An appointment is required for a total loss of service incident.
          properties:
            apiVersion:
              $ref: '#/components/schemas/apiVersion'
            buyerIdentifier:
              $ref: '#/components/schemas/buyer-2'
            sentAt:
              $ref: '#/components/schemas/sentAt'
            messageId:
              $ref: '#/components/schemas/messageId'
            buyerFaultReference:
              $ref: '#/components/schemas/buyerReference'
            status:
              $ref: '#/components/schemas/status'
            responseCode:
              $ref: '#/components/schemas/responseCode'
            errorMessage:
              format: Total Loss Of Service Without An Appointment
              $ref: '#/components/schemas/errorMessage'
        - type: object
          required:
            - apiVersion
            - buyerIdentifier
            - sentAt
            - messageId
            - buyerFaultReference
            - status
            - responseCode
            - errorMessage
          title: Non-Total Loss Of Service With An Appointment
          description: A Non-total loss of service incident can't have an appointment.
          properties:
            apiVersion:
              $ref: '#/components/schemas/apiVersion'
            buyerIdentifier:
              $ref: '#/components/schemas/buyer-2'
            sentAt:
              $ref: '#/components/schemas/sentAt'
            messageId:
              $ref: '#/components/schemas/messageId'
            buyerFaultReference:
              $ref: '#/components/schemas/buyerReference'
            status:
              $ref: '#/components/schemas/status'
            responseCode:
              $ref: '#/components/schemas/responseCode'
            errorMessage:
              format: Non-Total Loss Of Service With An Appointment
              $ref: '#/components/schemas/errorMessage'
    brokenXMLResponse:
      required:
        - fault
      description: Internal Server Error (Broken XML)
      properties:
        fault:
          $ref: '#/components/schemas/fault'
    value:
      description: Comment Text
      type: string
      format: Text
      example: We need access to the property to install the fibre.
    commentedBy:
      description: >
        "buyer" when comment added by ISP | "seller" when comment added by
        CityFibre
      type: string
      format: buyer | seller
      example: buyer
    commentedTime:
      description: The time this comment added. ISO 8601 date format (UTC)
      type: string
      format: date-time
      example: '2018-05-16T12:01:00Z'
    comment:
      type: object
      description: >-
        Comment only records most recent comment, responsibility for comment
        history lies outside of ticketing api.
      required:
        - value
        - commentedBy
        - commentedTime
      properties:
        value:
          $ref: '#/components/schemas/value'
          pattern: .*\S.*
          maxLength: 4000
        commentedBy:
          $ref: '#/components/schemas/commentedBy'
          maxLength: 50
        commentedTime:
          $ref: '#/components/schemas/commentedTime'
          maxLength: 25
    amendFaultReport:
      description: some description
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - buyerFaultReference
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          $ref: '#/components/schemas/serviceAffected'
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
          pattern: .*\S.*
        maintainerFaultReference:
          $ref: '#/components/schemas/maintainerReference'
        parentFaultReference:
          $ref: '#/components/schemas/parentReference'
        faultDetails:
          $ref: '#/components/schemas/faultDetails'
        appointment:
          $ref: '#/components/schemas/appointment'
        priorityLevel:
          $ref: '#/components/schemas/priorityLevel'
        comment:
          description: >-
            Comment only records most recent comment, responsibility for comment
            history lies outside of Ticketing API. Only required if the buyer
            has made a comment in this amendment.
          $ref: '#/components/schemas/comment'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
        attachments:
          $ref: '#/components/schemas/attachments'
    receivedAmendFaultReport:
      description: some description
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - buyerFaultReference
        - status
        - responseCode
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
        status:
          $ref: '#/components/schemas/status'
        responseCode:
          $ref: '#/components/schemas/responseCode'
        attachments:
          $ref: '#/components/schemas/attachments'
    receivedAmendFaultReportErrors:
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - buyerFaultReference
        - status
        - responseCode
        - errorMessage
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
        status:
          $ref: '#/components/schemas/status'
        responseCode:
          $ref: '#/components/schemas/responseCode'
        errorMessage:
          description: Error message for the amend fault report rejection.
          $ref: '#/components/schemas/errorMessage'
    requestFaultReportUpdate:
      type: object
      description: To request an Update
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - maintainerFaultReference
        - buyerFaultReference
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        maintainerFaultReference:
          $ref: '#/components/schemas/maintainerReference'
          pattern: .*\S.*
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
          pattern: .*\S.*
    rejectedResponse:
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - responseCode
        - errorMessage
      description: Rejected
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        responseCode:
          $ref: '#/components/schemas/responseCode'
        errorMessage:
          $ref: '#/components/schemas/errorMessage'
    receivedFaultReportUpdateResponse:
      oneOf:
        - type: object
          required:
            - apiVersion
            - buyerIdentifier
            - sentAt
            - messageId
            - responseCode
          title: Received Request Accepted
          properties:
            apiVersion:
              $ref: '#/components/schemas/apiVersion'
            buyerIdentifier:
              $ref: '#/components/schemas/buyer-2'
            sentAt:
              $ref: '#/components/schemas/sentAt'
            messageId:
              $ref: '#/components/schemas/messageId'
            responseCode:
              $ref: '#/components/schemas/responseCode'
            attachments:
              $ref: '#/components/schemas/attachments'
        - type: object
          $ref: '#/components/schemas/rejectedResponse'
          title: Received Request Rejected
    resolveAccepted:
      type: boolean
      description: Reject or Accept the status
      example: 'true'
    rejectedReason:
      type: string
      maxLength: 36
      description: Reason for rejection
      example: Not Fixed
    resolveResponse:
      description: To request an Update
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - buyerFaultReference
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        resolveAccepted:
          $ref: '#/components/schemas/resolveAccepted'
        maintainerFaultReference:
          $ref: '#/components/schemas/maintainerReference'
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
          pattern: .*\S.*
        rejectedReason:
          $ref: '#/components/schemas/rejectedReason'
    resolveAccepted-2:
      type: boolean
      example: true
      description: resolution is accepted by customer
    receivedResolveResponse:
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - responseCode
      title: Received Response
      description: Description.....
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        resolveAccepted:
          $ref: '#/components/schemas/resolveAccepted-2'
        buyerFaultReference:
          $ref: '#/components/schemas/buyerReference'
        responseCode:
          $ref: '#/components/schemas/responseCode'
        errorMessage:
          $ref: '#/components/schemas/errorMessage'
    faultDetailsStatus:
      allOf:
        - $ref: '#/components/schemas/faultDetails'
        - type: object
          properties:
            status:
              type: string
              description: Status, e.g. pending, rejected, in-progress
              enum:
                - pending
                - rejected
                - accepted
                - in-progress
                - opened
                - re-opened
                - resolved
                - closed
    notifyFaultReportUpdateAccepted:
      type: object
      title: Accepted
      required:
        - apiVersion
        - buyerIdentifier
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsStatus'
    missedAppointment:
      type: object
      required:
        - appointmentReservationKey
        - appointmentDate
        - appointmentStartTime
        - appointmentEndTime
        - sellerMissedAppointment
        - Amended
        - Cancelled
        - endUserMissedAppointment
        - endUserPreAgreed
        - MBORC
      properties:
        appointmentReservationKey:
          $ref: '#/components/schemas/appointmentReservationKey'
        appointmentDate:
          $ref: '#/components/schemas/appointmentDate'
        appointmentStartTime:
          $ref: '#/components/schemas/appointmentStartTime'
        appointmentEndTime:
          $ref: '#/components/schemas/appointmentEndTime'
        sellerMissedAppointment:
          type: boolean
          description: The seller missed the appointment
          example: false
        Amended:
          type: boolean
          description: The appointment has been amended
          example: false
        Cancelled:
          type: boolean
          description: The appointment has been cancelled
          example: false
        endUserMissedAppointment:
          type: boolean
          description: The end user missed the appointment
          example: false
        endUserPreAgreed:
          type: boolean
          description: The end user pre-agreed the appointment
          example: false
        MBORC:
          type: boolean
          description: >-
            The appointment is missed because of Matters Beyond Our Reasonable
            Control
          example: false
    faultDetailsMissedAppointment:
      allOf:
        - $ref: '#/components/schemas/faultDetails'
        - type: object
          properties:
            missedAppointment:
              $ref: '#/components/schemas/missedAppointment'
    notifyFaultReportUpdateAmended:
      type: object
      title: Amended
      required:
        - apiVersion
        - buyerIdentifier
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsMissedAppointment'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
        comment:
          description: >-
            Comment only records most recent comment, responsibility for comment
            history lies outside of Ticketing API. Only required if the seller
            has made a comment in this amendment.
          $ref: '#/components/schemas/comment'
    appointmentStatus:
      type: string
      maxLength: 36
      example: Confirmed
      description: confirmation status of service
    appointmentCancellation:
      type: boolean
      example: false
      description: whether or not the appointment has been cancelled
    appointmentCancelled:
      type: object
      required:
        - appointmentReservationKey
      properties:
        appointmentDate:
          $ref: '#/components/schemas/appointmentDate'
        appointmentStartTime:
          $ref: '#/components/schemas/appointmentStartTime'
        appointmentEndTime:
          $ref: '#/components/schemas/appointmentEndTime'
        appointmentReservationKey:
          $ref: '#/components/schemas/appointmentReservationKey'
        appointmentConfirmation:
          $ref: '#/components/schemas/appointmentStatus'
        appointmentCancelled:
          $ref: '#/components/schemas/appointmentCancellation'
    notifyFaultReportUpdateAppointmentCancelled:
      type: object
      title: Appointment Cancelled
      required:
        - apiVersion
        - buyerIdentifier
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsMissedAppointment'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
        appointments:
          type: array
          items:
            properties:
              appointment:
                $ref: '#/components/schemas/appointmentCancelled'
    appointmentClosureCode:
      type: string
      maxLength: 3
      example: SP
      description: the status code of the appointment
    appointmentCompleted:
      type: object
      required:
        - appointmentReservationKey
      properties:
        appointmentDate:
          $ref: '#/components/schemas/appointmentDate'
        appointmentStartTime:
          $ref: '#/components/schemas/appointmentStartTime'
        appointmentEndTime:
          $ref: '#/components/schemas/appointmentEndTime'
        appointmentReservationKey:
          $ref: '#/components/schemas/appointmentReservationKey'
        appointmentConfirmation:
          $ref: '#/components/schemas/appointmentStatus'
        appointmentCancelled:
          $ref: '#/components/schemas/appointmentCancellation'
        appointmentClosureCode:
          $ref: '#/components/schemas/appointmentClosureCode'
    notifyFaultReportUpdateAppointmentCompleted:
      type: object
      title: Appointment Confirmation
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsMissedAppointment'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
        appointments:
          type: array
          items:
            properties:
              appointment:
                $ref: '#/components/schemas/appointmentCompleted'
    appointmentConfirmed:
      type: object
      required:
        - appointmentReservationKey
      properties:
        appointmentDate:
          $ref: '#/components/schemas/appointmentDate'
        appointmentStartTime:
          $ref: '#/components/schemas/appointmentStartTime'
        appointmentEndTime:
          $ref: '#/components/schemas/appointmentEndTime'
        appointmentReservationKey:
          $ref: '#/components/schemas/appointmentReservationKey'
        appointmentConfirmation:
          $ref: '#/components/schemas/appointmentStatus'
    notifyFaultReportUpdateAppointmentConfirmation:
      type: object
      title: Appointment Confirmation
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsMissedAppointment'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
        appointments:
          type: array
          items:
            properties:
              appointment:
                $ref: '#/components/schemas/appointmentConfirmed'
    notifyFaultReportUpdateCancelled:
      type: object
      title: Cancelled - Buyer Requested cancellation
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsStatus'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
    exclusion:
      type: object
      required:
        - exclusionReason
        - numberOfDays
        - startDateTime
        - endDateTime
      properties:
        exclusionReason:
          type: string
          maxLength: 5
          description: |
            <details>
              <summary>Click to see Exclusion Reasons</summary>

              | Exclusion Reason | Description | Examples |
              |---|---|---|
              | RC001 |End Customer/Communications Provider requested cancellation of job (Due to late cancellation this needed to be provided and then ceased)|Order has been cancelled late. CityFibre systems are unable to cancel and must either complete the Order Journey or cancel the order after the missed appointment.|
              | RC002 |End Customer (or agent) caused damage to equipment or wiring ||
              | RC003 |End Customer access issues|No access to end customer premises. No suitable person available at end customer premises. End customer created access issues Wayleave refused. No Access Possible Hazard|
              | RC010 |Not total loss of Service||
              | RC012 |MBORC||
              | RC014 |Communications Providers access or site details unavailable or incorrect|when the CP wants to manage the access and their details are unavailable or incorrect|
              | RC016 |Temporary Service has been provided but additional work was required to provide permanent service.|all services have been restored; however, further quality work is required (the order/fault may remain open until this is completed) |
              | RC036 |Delivery date amended to a new date by the CP (prior to the original date), or the CP did not choose the earliest available date offered|Earliest available date not originally chosen, or CP requested date change|
              | RC037 |CP did not choose the earliest available date offered|Earliest available date not originally chosen |
              | RC043a |Site Unsafe|Hazard End User Issue|

            </details>
          example: RCXXX
        numberOfDays:
          type: integer
          description: The number of days the exclusion applies to
          example: 4
        startDateTime:
          type: string
          format: date-time
          description: The start date and time of the exclusion. ISO 8601 date format
          example: '2012-01-20T14:00:10Z'
        endDateTime:
          type: string
          format: date-time
          description: The end date and time of the exclusion. ISO 8601 date format
          example: '2012-01-20T14:00:10Z'
    lateRepairNotification:
      type: object
      properties:
        totalDelayInDays:
          type: integer
          description: The total delay in days
          example: 12
        sellerDelayDays:
          type: integer
          description: The seller delay in days
          example: 4
        nonSellerDelayDays:
          type: integer
          description: The non-seller delay in days
          example: 8
        exclusions:
          type: array
          description: The exclusions
          items:
            $ref: '#/components/schemas/exclusion'
    notifyFaultReportUpdateClosed:
      oneOf:
        - type: object
          title: Closed - Buyer Accepted Resolution
          required:
            - apiVersion
            - buyerIdentifier
            - sentAt
            - messageId
            - reportDateTime
            - reporterContactDetails
            - endUserContactDetails
            - serviceAffected
            - buyerFaultReference
            - maintainerFaultReference
            - parentFaultReference
            - faultDetails
            - updates
          properties:
            apiVersion:
              $ref: '#/components/schemas/apiVersion'
            buyerIdentifier:
              $ref: '#/components/schemas/buyer-2'
            sentAt:
              $ref: '#/components/schemas/sentAt'
            messageId:
              $ref: '#/components/schemas/messageId'
            reportDateTime:
              $ref: '#/components/schemas/reportDateTime'
            reporterContactDetails:
              $ref: '#/components/schemas/contactDetails'
            endUserContactDetails:
              $ref: '#/components/schemas/contactDetails'
            serviceAffected:
              type: string
              pattern: .*\S.*
              description: The service that is affected by the issue
            buyerFaultReference:
              type: string
              pattern: .*\S.*
              description: >-
                The fault reference used by the buyer. Used to identify the
                fault, so must be unique.
            maintainerFaultReference:
              type: string
              description: >-
                The supplier’s fault reference. Only populated if Ticket is
                ‘Accepted’
            parentFaultReference:
              type: string
              description: >-
                The buyer’s reference for a pre-existing related fault (if
                present)
            faultDetails:
              $ref: '#/components/schemas/faultDetailsStatus'
            updates:
              type: array
              items:
                $ref: '#/components/schemas/Updates'
        - type: object
          title: Closed - Auto Closed
          required:
            - apiVersion
            - buyerIdentifier
            - sentAt
            - messageId
            - reportDateTime
            - reporterContactDetails
            - endUserContactDetails
            - serviceAffected
            - buyerFaultReference
            - maintainerFaultReference
            - parentFaultReference
            - faultDetails
            - updates
          properties:
            apiVersion:
              $ref: '#/components/schemas/apiVersion'
            buyerIdentifier:
              $ref: '#/components/schemas/buyer-2'
            sentAt:
              $ref: '#/components/schemas/sentAt'
            messageId:
              $ref: '#/components/schemas/messageId'
            reportDateTime:
              $ref: '#/components/schemas/reportDateTime'
            reporterContactDetails:
              $ref: '#/components/schemas/contactDetails'
            endUserContactDetails:
              $ref: '#/components/schemas/contactDetails'
            serviceAffected:
              type: string
              description: The service that is affected by the issue
            buyerFaultReference:
              type: string
              description: >-
                The fault reference used by the buyer. Used to identify the
                fault, so must be unique.
            maintainerFaultReference:
              type: string
              description: >-
                The supplier’s fault reference. Only populated if Ticket is
                ‘Accepted’
            parentFaultReference:
              type: string
              description: >-
                The buyer’s reference for a pre-existing related fault (if
                present)
            faultDetails:
              $ref: '#/components/schemas/faultDetailsStatus'
            updates:
              type: array
              items:
                $ref: '#/components/schemas/Updates'
        - type: object
          title: Closed - Late Repair
          required:
            - apiVersion
            - buyerIdentifier
            - sentAt
            - messageId
            - buyerFaultReference
            - maintainerFaultReference
            - parentFaultReference
            - serviceAffected
            - lateRepairNotification
          properties:
            apiVersion:
              $ref: '#/components/schemas/apiVersion'
            buyerIdentifier:
              $ref: '#/components/schemas/buyer-2'
            sentAt:
              $ref: '#/components/schemas/sentAt'
            messageId:
              $ref: '#/components/schemas/messageId'
            buyerFaultReference:
              type: string
              description: >-
                The fault reference used by the buyer. Used to identify the
                fault, so must be unique.
            maintainerFaultReference:
              type: string
              description: >-
                The supplier’s fault reference. Only populated if Ticket is
                ‘Accepted’
            parentFaultReference:
              type: string
              description: >-
                The buyer’s reference for a pre-existing related fault (if
                present)
            serviceAffected:
              type: string
              description: The service that is affected by the issue
            lateRepairNotification:
              $ref: '#/components/schemas/lateRepairNotification'
    notifyFaultReportUpdateInProgress:
      type: object
      title: InProgress
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsStatus'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
        appointments:
          type: array
          items:
            properties:
              appointment:
                $ref: '#/components/schemas/appointment'
    notifyFaultReportUpdateMissedAppointment:
      type: object
      title: Missed Appointment
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsMissedAppointment'
        appointments:
          type: array
          items:
            properties:
              appointment:
                $ref: '#/components/schemas/appointment'
    notifyFaultReportUpdateOnHold:
      type: object
      title: On Hold
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsMissedAppointment'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
    faultDetailsStatusReason:
      allOf:
        - $ref: '#/components/schemas/faultDetails'
        - type: object
          properties:
            status:
              type: string
              description: Status, e.g. pending, rejected, in-progress
              enum:
                - pending
                - rejected
                - accepted
                - in-progress
                - opened
                - re-opened
                - resolved
                - closed
                - on-hold
                - cancelled
            statusReason:
              type: string
              description: Free text description of reason for status change
    notifyFaultReportUpdateRejected:
      type: object
      title: Rejected
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsStatusReason'
    notifyFaultReportUpdateResolved:
      type: object
      title: Resolved
      required:
        - apiVersion
        - buyerIdentifier
        - sentAt
        - messageId
        - reportDateTime
        - reporterContactDetails
        - endUserContactDetails
        - serviceAffected
        - buyerFaultReference
        - maintainerFaultReference
        - parentFaultReference
        - faultDetails
        - updates
      properties:
        apiVersion:
          $ref: '#/components/schemas/apiVersion'
        buyerIdentifier:
          $ref: '#/components/schemas/buyer-2'
        sentAt:
          $ref: '#/components/schemas/sentAt'
        messageId:
          $ref: '#/components/schemas/messageId'
        reportDateTime:
          $ref: '#/components/schemas/reportDateTime'
        reporterContactDetails:
          $ref: '#/components/schemas/contactDetails'
        endUserContactDetails:
          $ref: '#/components/schemas/contactDetails'
        serviceAffected:
          type: string
          pattern: .*\S.*
          description: The service that is affected by the issue
        buyerFaultReference:
          type: string
          pattern: .*\S.*
          description: >-
            The fault reference used by the buyer. Used to identify the fault,
            so must be unique.
        maintainerFaultReference:
          type: string
          description: >-
            The supplier’s fault reference. Only populated if Ticket is
            ‘Accepted’
        parentFaultReference:
          type: string
          description: The buyer’s reference for a pre-existing related fault (if present)
        faultDetails:
          $ref: '#/components/schemas/faultDetailsStatusReason'
        updates:
          type: array
          items:
            $ref: '#/components/schemas/Updates'
  requestBodies:
    queryAppointmentAvailabilityRequest:
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/queryAppointmentAvailabilityRequest'
          examples:
            AppointmentAvailabilityRequest:
              summary: Appointment Availability Example
              value: >
                <queryAppointmentAvailabilityRequest
                xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd"
                xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                  <message>
                    <messageId>b68b2cf4-475e-11e1-a92e-fb2ff6467c99</messageId>
                    <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                    <sentAt>2012-01-20T18:30:43Z</sentAt>
                  </message>
                  <buyer>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                  </buyer>
                  <seller>
                    <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                  </seller>
                  <addressKey>10002491172</addressKey>
                  <appointmentsFrom>2017-10-18</appointmentsFrom>
                  <appointmentType>
                    <fault/>
                  </appointmentType>
                  <cfh:productName>ftthl2r</cfh:productName>
                  <cfh:reappointment>false</cfh:reappointment>
                </queryAppointmentAvailabilityRequest>
            AppointmentAvailabilityRequestProjectReference:
              summary: Appointment Availability with Project Reference Example
              value: >
                <queryAppointmentAvailabilityRequest
                xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd"
                xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                  <message>
                    <messageId>b68b2cf4-475e-11e1-a92e-fb2ff6467c99</messageId>
                    <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                    <sentAt>2012-01-20T18:30:43Z</sentAt>
                  </message>
                  <buyer>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                  </buyer>
                  <seller>
                    <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                  </seller>
                  <addressKey>10002491172</addressKey>
                  <appointmentsFrom>2017-10-18</appointmentsFrom>
                  <appointmentType>
                    <fault/>
                  </appointmentType>
                  <cfh:productName>ftthl2r</cfh:productName>
                  <cfh:reappointment>false</cfh:reappointment>
                  <cfh:projectReference>PREF1234567</cfh:projectReference>
                </queryAppointmentAvailabilityRequest>
    reserveAppointmentRequest:
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/reserveAppointmentRequest'
          examples:
            ReserveAppointment:
              summary: Reserve Appointment Example
              value: >
                <reserveAppointmentRequest
                xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd"
                xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                  <message>
                    <messageId>b68b2cf4-475e-11e1-a92e-fb2ff6467c99</messageId>
                    <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                    <sentAt>2012-01-20T18:30:43Z</sentAt>
                  </message>
                  <buyer>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                  </buyer>
                  <seller>
                    <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                  </seller>
                  <appointmentSlot>
                    <appointmentDate>2012-01-20</appointmentDate>
                    <appointmentStartTime>08:00</appointmentStartTime>
                    <appointmentEndTime>13:00</appointmentEndTime>
                  </appointmentSlot>
                  <appointmentType>
                    <fault/>
                  </appointmentType>
                  <cfh:productName>ftthl2r</cfh:productName>
                  <cfh:addressKey>123456789012</cfh:addressKey>
                  <cfh:reappointment>false</cfh:reappointment>
                </reserveAppointmentRequest>
            ReserveAppointmentProjectReference:
              summary: Reserve Appointment with Project Reference Example
              value: >
                <reserveAppointmentRequest
                xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd"
                xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                  <message>
                    <messageId>b68b2cf4-475e-11e1-a92e-fb2ff6467c99</messageId>
                    <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                    <sentAt>2012-01-20T18:30:43Z</sentAt>
                  </message>
                  <buyer>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                  </buyer>
                  <seller>
                    <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                  </seller>
                  <appointmentSlot>
                    <appointmentDate>2012-01-20</appointmentDate>
                    <appointmentStartTime>08:00</appointmentStartTime>
                    <appointmentEndTime>13:00</appointmentEndTime>
                  </appointmentSlot>
                  <appointmentType>
                    <fault/>
                  </appointmentType>
                  <cfh:productName>ftthl2r</cfh:productName>
                  <cfh:addressKey>123456789012</cfh:addressKey>
                  <cfh:reappointment>false</cfh:reappointment>
                  <cfh:projectReference>PREF1234567</cfh:projectReference>
                </reserveAppointmentRequest>
    addFaultReport:
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/addFaultReport'
          examples:
            AddFaultReport:
              summary: Creates a new fault Report.
              value: >
                <addFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>SP-00001</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S21709</serviceAffected>
                    <buyerFaultReference>MPTEST-ABC123-15</buyerFaultReference>
                    <maintainerFaultReference>CS0005727</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Second Test - E2E Ticketing API -> ServiceNow</description>
                        <type>Service Outage</type>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Yes</siteAccessDetails>
                        <siteAccessContactDetails>
                            <name>Joe</name>
                            <phone>1234</phone>
                            <email>joe.smith@example.com</email>
                        </siteAccessContactDetails>
                        <triageComplete>true</triageComplete>
                        <triageFindings>Triage report complete - details follow: ...</triageFindings>
                    </faultDetails>
                    <appointment>
                        <appointmentDate>2018-06-09</appointmentDate>
                        <appointmentStartTime>12:00</appointmentStartTime>
                        <appointmentEndTime>13:00</appointmentEndTime>
                        <appointmentReservationKey>1234567</appointmentReservationKey>
                    </appointment>
                    <priorityLevel>1</priorityLevel>
                    <errorMessage>Some failure</errorMessage>
                </addFaultReport>
    amendFaultReport:
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/amendFaultReport'
          examples:
            AmendFaultReport:
              summary: Amend a Fault Report.
              value: >
                <amendFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>TEST</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>SP-00002</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>MPTEST-A101</buyerFaultReference>
                    <maintainerFaultReference>CS0005727</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here.
                            Comments should be appended to the comment list.
                        </description>
                        <type>Service Outage</type>
                        <status>accepted</status>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <name>Joe</name>
                            <phone>1234</phone>
                            <email>joe.smith@example.com</email>
                        </siteAccessContactDetails>
                        <triageComplete>true</triageComplete>
                        <triageFindings>Triage report complete - details follow: ...</triageFindings>
                    </faultDetails>
                    <appointment>
                        <appointmentDate>2018-06-09</appointmentDate>
                        <appointmentStartTime>12:00</appointmentStartTime>
                        <appointmentEndTime>13:00</appointmentEndTime>
                        <appointmentReservationKey>1234567</appointmentReservationKey>
                    </appointment>
                    <priorityLevel>1</priorityLevel>
                    <comment>
                        <value>We need access to the property. </value>
                        <commentedBy>buyer</commentedBy>
                        <commentedTime>2018-06-09T15:11:11.0001Z</commentedTime>
                    </comment>
                </amendFaultReport>
    requestFaultReportUpdate:
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/requestFaultReportUpdate'
          examples:
            Request:
              summary: Request an Update from the Supplier
              value: >
                <requestFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-05-16T12:01:00Z</sentAt>
                  <messageId>SP-00001</messageId>
                  <maintainerFaultReference>TIC-000111</maintainerFaultReference>
                  <buyerFaultReference>SP-123ABC</buyerFaultReference>
                </requestFaultReportUpdate>
    resolveResponse:
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/resolveResponse'
          examples:
            Request:
              summary: Accept
              value: >
                <resolveResponse
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>TEST</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00004</messageId>
                    <resolveAccepted>true</resolveAccepted>
                    <buyerFaultReference>MP-PR-004</buyerFaultReference>
                    <maintainerFaultReference>CS0140872</maintainerFaultReference>
                </resolveResponse>
            Request2:
              summary: Reject
              value: >
                <resolveResponse
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00004</messageId>
                    <resolveAccepted>false</resolveAccepted>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>TIC-DEV00027757</maintainerFaultReference>
                    <rejectedReason>Not fixed</rejectedReason>
                </resolveResponse>
    notifyFaultReportUpdateAccepted:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateAccepted'
          examples:
            Accepted:
              summary: Accepted
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                          xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                      <apiVersion>1.0</apiVersion>
                      <buyerIdentifier>SPDEV1</buyerIdentifier>
                      <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                      <messageId>CF-00001</messageId>
                      <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                      <reporterContactDetails>
                          <name>Joe</name>
                          <phone>1234</phone>
                          <email>joe.smith@example.com</email>
                      </reporterContactDetails>
                      <endUserContactDetails>
                          <phone>1234</phone>
                          <email>rp@example.com</email>
                      </endUserContactDetails>
                      <serviceAffected>S18650</serviceAffected>
                      <buyerFaultReference>SP-123ABC</buyerFaultReference>
                      <maintainerFaultReference>CF-XYZZY</maintainerFaultReference>
                      <parentFaultReference>SP-456XYZ</parentFaultReference>
                      <faultDetails>
                          <description>Initial fault description goes here. Updates will be appended.</description>
                          <type>Fault</type>
                          <status>accepted</status>
                          <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                          <faultLocation>
                              500 Avebury Boulevard,
                              Milton Keynes
                              MK1 3XX
                          </faultLocation>
                          <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                          <siteAccessContactDetails>
                              <phone>12345</phone>
                          </siteAccessContactDetails>
                      </faultDetails>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateAmended:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateAmended'
          examples:
            Amended:
              summary: Amended
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>CF-00002</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here.
                            Updates should be appended to the updates list.
                        </description>
                        <type>Fault</type>
                        <status>accepted</status>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                    </faultDetails>
                    <updates>
                        <update>
                            <description>Added image.jpg</description>
                            <updatedBy>buyer</updatedBy>
                            <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                        </update>
                    </updates>
                    <comment>
                        <value> We have a question about the property. </value>
                        <commentedBy>seller</commentedBy>
                        <commentedTime>2018-06-09T15:11:11.0001Z</commentedTime>
                    </comment>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateAppointmentCancelled:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateAppointmentCancelled'
          examples:
            MissedAppointment:
              summary: Appointment Cancelled
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                  <messageId>CF-00003</messageId>
                  <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                  <reporterContactDetails>
                    <name>Joe</name>
                    <phone>1234</phone>
                    <email>joe.smith@example.com</email>
                  </reporterContactDetails>
                  <endUserContactDetails>
                    <phone>1234</phone>
                    <email>rp@example.com</email>
                  </endUserContactDetails>
                  <serviceAffected>S18650</serviceAffected>
                  <buyerFaultReference>SP-123ABC</buyerFaultReference>
                  <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                  <parentFaultReference>SP-456XYZ</parentFaultReference>
                  <faultDetails>
                    <description>Initial fault description goes here.
                      Updates should be appended to the updates list.
                    </description>
                    <type>Fault</type>
                    <status>in-progress</status>
                    <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                    <faultLocation>
                      500 Avebury Boulevard,
                      Milton Keynes
                      MK1 3XX
                    </faultLocation>
                    <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                    <siteAccessContactDetails>
                      <phone>12345</phone>
                    </siteAccessContactDetails>
                  </faultDetails>
                  <updates>
                    <update>
                      <description>Added image.jpg</description>
                      <updatedBy>buyer</updatedBy>
                      <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                    </update>
                  </updates>
                  <appointments>
                    <appointment>
                      <appointmentReservationKey>1234568</appointmentReservationKey>
                      <appointmentDate>2012-01-20</appointmentDate>
                      <appointmentStartTime>08:00</appointmentStartTime>
                      <appointmentEndTime>13:00</appointmentEndTime>
                      <appointmentConfirmationStatus>Confirmed</appointmentConfirmationStatus>
                      <appointmentCancelled>true</appointmentCancelled>
                    </appointment>
                  </appointments>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateAppointmentCompleted:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateAppointmentCompleted'
          examples:
            Completed:
              summary: Appointment Completed
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                  <messageId>CF-00003</messageId>
                  <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                  <reporterContactDetails>
                    <name>Joe</name>
                    <phone>1234</phone>
                    <email>joe.smith@example.com</email>
                  </reporterContactDetails>
                  <endUserContactDetails>
                    <phone>1234</phone>
                    <email>rp@example.com</email>
                  </endUserContactDetails>
                  <serviceAffected>S18650</serviceAffected>
                  <buyerFaultReference>SP-123ABC</buyerFaultReference>
                  <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                  <parentFaultReference>SP-456XYZ</parentFaultReference>
                  <faultDetails>
                    <description>Initial fault description goes here.
                      Updates should be appended to the updates list.
                    </description>
                    <type>Fault</type>
                    <status>in-progress</status>
                    <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                    <faultLocation>
                      500 Avebury Boulevard,
                      Milton Keynes
                      MK1 3XX
                    </faultLocation>
                    <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                    <siteAccessContactDetails>
                      <phone>12345</phone>
                    </siteAccessContactDetails>
                  </faultDetails>
                  <updates>
                    <update>
                      <description>Added image.jpg</description>
                      <updatedBy>buyer</updatedBy>
                      <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                    </update>
                  </updates>
                  <appointments>
                    <appointment>
                      <appointmentReservationKey>1234568</appointmentReservationKey>
                      <appointmentDate>2012-01-20</appointmentDate>
                      <appointmentStartTime>08:00</appointmentStartTime>
                      <appointmentEndTime>13:00</appointmentEndTime>
                      <appointmentConfirmationStatus>Confirmed</appointmentConfirmationStatus>
                      <appointmentClosureCode>FR</appointmentClosureCode>
                      <appointmentCancelled>false</appointmentCancelled>
                    </appointment>
                  </appointments>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateAppointmentConfirmation:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: >-
              #/components/schemas/notifyFaultReportUpdateAppointmentConfirmation
          examples:
            Confirmed:
              summary: Appointment Confirmation
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                  <messageId>CF-00003</messageId>
                  <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                  <reporterContactDetails>
                    <name>Joe</name>
                    <phone>1234</phone>
                    <email>joe.smith@example.com</email>
                  </reporterContactDetails>
                  <endUserContactDetails>
                    <phone>1234</phone>
                    <email>rp@example.com</email>
                  </endUserContactDetails>
                  <serviceAffected>S18650</serviceAffected>
                  <buyerFaultReference>SP-123ABC</buyerFaultReference>
                  <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                  <parentFaultReference>SP-456XYZ</parentFaultReference>
                  <faultDetails>
                    <description>Initial fault description goes here.
                      Updates should be appended to the updates list.
                    </description>
                    <type>Fault</type>
                    <status>in-progress</status>
                    <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                    <faultLocation>
                      500 Avebury Boulevard,
                      Milton Keynes
                      MK1 3XX
                    </faultLocation>
                    <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                    <siteAccessContactDetails>
                      <phone>12345</phone>
                    </siteAccessContactDetails>
                  </faultDetails>
                  <updates>
                    <update>
                      <description>Added image.jpg</description>
                      <updatedBy>buyer</updatedBy>
                      <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                    </update>
                  </updates>
                  <appointments>
                    <appointment>
                      <appointmentReservationKey>1234568</appointmentReservationKey>
                      <appointmentDate>2012-01-20</appointmentDate>
                      <appointmentStartTime>08:00</appointmentStartTime>
                      <appointmentEndTime>13:00</appointmentEndTime>
                      <appointmentConfirmationStatus>Confirmed or Failed</appointmentConfirmationStatus>
                    </appointment>
                  </appointments>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateCancelled:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateCancelled'
          examples:
            Cancelled:
              summary: Cancelled - requested by buyer
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00002</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here.
                            Updates should be appended to the updates list.
                        </description>
                        <type>Fault</type>
                        <status>cancelled</status>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                    </faultDetails>
                    <updates>
                        <update>
                            <description>Cancelled</description>
                            <updatedBy>seller</updatedBy>
                            <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                        </update>
                    </updates>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateClosed:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateClosed'
          examples:
            Closed:
              summary: Closed - buyer accepted resolution
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00002</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here.
                            Updates should be appended to the updates list.
                        </description>
                        <type>Fault</type>
                        <status>closed</status>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                    </faultDetails>
                    <updates>
                        <update>
                            <description>Added image.jpg</description>
                            <updatedBy>buyer</updatedBy>
                            <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                        </update>
                        <update>
                            <description>Resolved - fault fixed.</description>
                            <updatedBy>seller</updatedBy>
                            <updatedTime>2018-06-09T16:11:11.0001Z</updatedTime>
                        </update>
                        <update>
                            <description>Closed - buyer accepted resolution.</description>
                            <updatedBy>seller</updatedBy>
                            <updatedTime>2018-06-09T17:11:11.0001Z</updatedTime>
                        </update>
                    </updates>
                </notifyFaultReportUpdate>
            AutoClosed:
              summary: Closed - Autoclosed
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>SP-00002</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here.
                            Updates should be appended to the updates list.
                        </description>
                        <type>Fault</type>
                        <status>closed</status>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                    </faultDetails>
                    <updates>
                        <update>
                            <description>Added image.jpg</description>
                            <updatedBy>buyer</updatedBy>
                            <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                        </update>
                        <update>
                            <description>Auto-closed by seller</description>
                            <updatedBy>seller</updatedBy>
                            <updatedTime>2018-06-09T17:11:11.0001Z</updatedTime>
                        </update>
                    </updates>
                </notifyFaultReportUpdate>
            LateRepair:
              summary: Closed - Late Repair
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                      <apiVersion>1.0</apiVersion>
                      <buyerIdentifier>SPBUYERID</buyerIdentifier>
                      <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                      <messageId>SP-00004</messageId>
                      <buyerFaultReference>SP-123ABC</buyerFaultReference>
                      <maintainerFaultReference>CF-XYZZY</maintainerFaultReference>
                      <parentFaultReference>SP-456XYZ</parentFaultReference>
                      <serviceAffected>S21709</serviceAffected>
                      <lateRepairNotification>
                          <totalDelayInDays>12</totalDelayInDays>
                          <sellerDelayDays>4</sellerDelayDays>
                          <nonSellerDelayDays>8</nonSellerDelayDays>
                          <exclusions>
                          <exclusion>
                              <exclusionReason>RCXXX</exclusionReason>
                              <numberOfDays>4</numberOfDays>
                              <startDateTime>2012-01-20T14:00:10Z</startDateTime>
                              <endDateTime>2012-01-20T14:00:10Z</endDateTime>
                          </exclusion>
                          <exclusion>
                              <exclusionReason>RCXXX</exclusionReason>
                              <numberOfDays>4</numberOfDays>
                              <startDateTime>2012-01-20T14:00:10Z</startDateTime>
                              <endDateTime>2012-01-20T14:00:10Z</endDateTime>
                          </exclusion>
                          </exclusions>
                      </lateRepairNotification>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateInProgress:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateInProgress'
          examples:
            InProgress:
              summary: In Progress
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>CF-00003</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here.
                            Updates should be appended to the updates list.
                        </description>
                        <type>Fault</type>
                        <status>in-progress</status>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                    </faultDetails>
                    <updates>
                        <update>
                            <description>Added image.jpg</description>
                            <updatedBy>buyer</updatedBy>
                            <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                        </update>
                    </updates>
                    <appointments>
                        <appointment>
                            <appointmentReservationKey>1234568</appointmentReservationKey>
                            <appointmentDate>2012-01-20</appointmentDate>
                            <appointmentStartTime>08:00</appointmentStartTime>
                            <appointmentEndTime>13:00</appointmentEndTime>
                        </appointment>
                    </appointments>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateMissedAppointment:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateMissedAppointment'
          examples:
            MissedAppointment:
              summary: Missed Appointment
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPBUYERID</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>CF-00001</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>J Doe</name>
                        <phone>1234</phone>
                        <email>jdoe@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>jdoe@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>CF-XYZZY</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here. Updates will be appended.</description>
                        <type>Fault</type>
                        <status>accepted</status>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                        <missedAppointment>
                            <appointmentReservationKey>1234568</appointmentReservationKey>
                            <appointmentDate>2012-01-20</appointmentDate>
                            <appointmentStartTime>08:00</appointmentStartTime>
                            <appointmentEndTime>13:00</appointmentEndTime>
                            <sellerMissedAppointment>N</sellerMissedAppointment>
                            <Amended>N</Amended>
                            <Cancelled>N</Cancelled>
                            <endUserMissedAppointment>N</endUserMissedAppointment>
                            <endUserPreAgreed>N</endUserPreAgreed>
                            <MBORC>N</MBORC>
                        </missedAppointment>
                    </faultDetails>
                    <appointments>
                        <appointment>
                            <appointmentDate>2012-01-20</appointmentDate>
                            <appointmentStartTime>08:00</appointmentStartTime>
                            <appointmentEndTime>13:00</appointmentEndTime>
                            <appointmentReservationKey>1234568</appointmentReservationKey>
                        </appointment>
                    </appointments>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateOnHold:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateOnHold'
          examples:
            Amended:
              summary: OnHold
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <messageId>CF-00003</messageId>
                  <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                  <reporterContactDetails>
                      <name>Matt</name>
                      <phone>1234</phone>
                      <email>matt.porter@cityfibre.com</email>
                  </reporterContactDetails>
                  <endUserContactDetails>
                      <phone>1234</phone>
                      <email>rp@example.com</email>
                  </endUserContactDetails>
                  <serviceAffected>S18650</serviceAffected>
                  <buyerFaultReference>SP-123ABC</buyerFaultReference>
                  <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                  <parentFaultReference>SP-456XYZ</parentFaultReference>
                  <faultDetails>
                      <description>Initial fault description goes here.
                          Updates should be appended to the updates list.
                      </description>
                      <type>Fault</type>
                      <status>on-hold</status>
                      <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                      <faultLocation>
                          500 Avebury Boulevard,
                          Milton Keynes
                          MK1 3XX
                      </faultLocation>
                      <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                      <siteAccessContactDetails>
                          <phone>12345</phone>
                      </siteAccessContactDetails>
                  </faultDetails>
                  <updates>
                    <update>
                      <description>Created</description>
                      <updatedBy>Buyer</updatedBy>
                      <updatedTime>2018-05-16T12:01:00Z</updatedTime>
                    </update>
                    <update>
                      <description>On-hold</description>
                      <updatedBy>Seller</updatedBy>
                      <updatedTime>2018-05-16T12:01:00Z</updatedTime>
                    </update>
                  </updates>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateRejected:
      description: Notify Fault Report Updated
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateRejected'
          examples:
            Rejected:
              summary: Rejected
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>CF-00001</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference></maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here. Updates will be appended.</description>
                        <type>Fault</type>
                        <status>rejected</status>
                        <statusReason>Missing data</statusReason>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                    </faultDetails>
                    <updates>
                        <update>
                            <description>Fault report rejected, not enough information</description>
                            <updatedBy>seller</updatedBy>
                            <updatedTime>2018-06-09T13:15:17.0001Z</updatedTime>
                        </update>
                    </updates>
                </notifyFaultReportUpdate>
    notifyFaultReportUpdateResolved:
      description: Notify Fault Report Update
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/notifyFaultReportUpdateResolved'
          examples:
            Resolved:
              summary: Resolved
              value: >
                <notifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-06-09T11:15:17.0001Z</sentAt>
                    <messageId>CF-00004</messageId>
                    <reportDateTime>2018-06-09T11:15:17.0001Z</reportDateTime>
                    <reporterContactDetails>
                        <name>Joe</name>
                        <phone>1234</phone>
                        <email>joe.smith@example.com</email>
                    </reporterContactDetails>
                    <endUserContactDetails>
                        <phone>1234</phone>
                        <email>rp@example.com</email>
                    </endUserContactDetails>
                    <serviceAffected>S18650</serviceAffected>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <maintainerFaultReference>(Not in report; only after creation)</maintainerFaultReference>
                    <parentFaultReference>SP-456XYZ</parentFaultReference>
                    <faultDetails>
                        <description>Initial fault description goes here.
                            Updates should be appended to the updates list.
                        </description>
                        <type>Fault</type>
                        <status>resolved</status>
                        <statusReason>Fault fixed at user end.</statusReason>
                        <faultStartTime>2018-05-16T12:01:00Z</faultStartTime>
                        <faultLocation>
                            500 Avebury Boulevard,
                            Milton Keynes
                            MK1 3XX
                        </faultLocation>
                        <siteAccessDetails>Access 24/7, call 0771234123.</siteAccessDetails>
                        <siteAccessContactDetails>
                            <phone>12345</phone>
                        </siteAccessContactDetails>
                    </faultDetails>
                    <updates>
                        <update>
                            <description>Added image.jpg</description>
                            <updatedBy>buyer</updatedBy>
                            <updatedTime>2018-06-09T15:11:11.0001Z</updatedTime>
                        </update>
                        <update>
                            <description>Resolved - fault fixed.</description>
                            <updatedBy>seller</updatedBy>
                            <updatedTime>2018-06-09T16:11:11.0001Z</updatedTime>
                        </update>
                        <update>
                            <description>Closed - buyer accepted resolution.</description>
                            <updatedBy>seller</updatedBy>
                            <updatedTime>2018-06-09T17:11:11.0001Z</updatedTime>
                        </update>
                    </updates>
                </notifyFaultReportUpdate>
  responses:
    queryAppointmentAvailabilityResponse:
      description: Appointment Availability Response
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/queryAppointmentAvailabilityResponse'
          examples:
            AppointmentSlotsEmpty:
              summary: Could not find any available appointments for a valid request
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <queryAppointmentAvailabilityResponse xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd" xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                      <message>
                        <messageId>bf1efe1f-f5fc-47e7-9d53-d2b16529aa4c</messageId>
                        <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                        <sentAt>2022-05-18T11:23:07.710Z</sentAt>
                      </message>
                      <buyer>
                        <buyerIdentifier>SPDEV1</buyerIdentifier>
                      </buyer>
                      <seller>
                        <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                      </seller>
                      <queryAppointmentAvailabilityAccepted>
                        <appointmentSlots></appointmentSlots>
                      </queryAppointmentAvailabilityAccepted>
                    </queryAppointmentAvailabilityResponse>
                  </soap:Body>
                </soap:Envelope>
            AppointmentSlotsAvailable:
              summary: Returned a list of valid appointment slots for a valid request
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <queryAppointmentAvailabilityResponse xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd" xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                      <message>
                        <messageId>029271b0-390c-43bf-b64e-35d6ebaf1f4b</messageId>
                        <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                        <sentAt>2022-05-20T09:35:50.474Z</sentAt>
                      </message>
                      <buyer>
                        <buyerIdentifier>SPDEV1</buyerIdentifier>
                      </buyer>
                      <seller>
                        <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                      </seller>
                      <queryAppointmentAvailabilityAccepted>
                        <appointmentSlots>
                          <appointmentSlot>
                            <appointmentDate>2022-05-24</appointmentDate>
                            <appointmentStartTime>08:00</appointmentStartTime>
                            <appointmentEndTime>13:00</appointmentEndTime>
                          </appointmentSlot>
                          <appointmentSlot>
                            <appointmentDate>2022-05-24</appointmentDate>
                            <appointmentStartTime>13:00</appointmentStartTime>
                            <appointmentEndTime>18:00</appointmentEndTime>
                          </appointmentSlot>
                          <appointmentSlot>
                            <appointmentDate>2022-05-25</appointmentDate>
                            <appointmentStartTime>08:00</appointmentStartTime>
                            <appointmentEndTime>13:00</appointmentEndTime>
                          </appointmentSlot>
                          <appointmentSlot>
                            <appointmentDate>2022-05-25</appointmentDate>
                            <appointmentStartTime>13:00</appointmentStartTime>
                            <appointmentEndTime>18:00</appointmentEndTime>
                          </appointmentSlot>
                          <appointmentSlot>
                            <appointmentDate>2022-05-26</appointmentDate>
                            <appointmentStartTime>08:00</appointmentStartTime>
                            <appointmentEndTime>13:00</appointmentEndTime>
                          </appointmentSlot>
                          <appointmentSlot>
                            <appointmentDate>2022-05-26</appointmentDate>
                            <appointmentStartTime>13:00</appointmentStartTime>
                            <appointmentEndTime>18:00</appointmentEndTime>
                          </appointmentSlot>
                        </appointmentSlots>
                      </queryAppointmentAvailabilityAccepted>
                    </queryAppointmentAvailabilityResponse>
                  </soap:Body>
                </soap:Envelope>
            InvalidParameters:
              summary: Invalid request
              value: |
                <soap:Envelope
                  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <queryAppointmentAvailabilityResponse
                      xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd"
                      xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                      <message>
                        <messageId>7e2c9c2b-9bed-43c0-9052-cfaa516a8519</messageId>
                        <correlationId>c038b297-6792-44ba-87a4-58fe6cda33bc</correlationId>
                        <sentAt>2023-01-23T15:32:55.832Z</sentAt>
                      </message>
                      <buyer>
                        <buyerIdentifier>SPDEV1</buyerIdentifier>
                      </buyer>
                      <seller>
                        <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                      </seller>
                      <queryAppointmentAvailabilityRejected>
                        <errorOther>
                          <errorCode>507</errorCode>
                          <errorMessage>Invalid product: {'product_code': 'xyz'}</errorMessage>
                        </errorOther>
                      </queryAppointmentAvailabilityRejected>
                    </queryAppointmentAvailabilityResponse>
                  </soap:Body>
                </soap:Envelope>
            ValidationError:
              summary: Validation Error (Invalid Project Reference Example)
              value: |
                <soap:Envelope
                  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <queryAppointmentAvailabilityResponse
                      xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd"
                      xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                      <message>
                        <messageId>7e2c9c2b-9bed-43c0-9052-cfaa516a8519</messageId>
                        <correlationId>c038b297-6792-44ba-87a4-58fe6cda33bc</correlationId>
                        <sentAt>2023-01-23T15:32:55.832Z</sentAt>
                      </message>
                      <buyer>
                        <buyerIdentifier>SPDEV1</buyerIdentifier>
                      </buyer>
                      <seller>
                        <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                      </seller>
                      <queryAppointmentAvailabilityRejected>
                        <validationFailures>
                          <validationFailure>
                            <validationFailureField>cfh:projectReference</validationFailureField>
                            <validationFailureMessage>511, "Unknown, invalid or expired project reference"</validationFailureMessage>
                          </validationFailure>
                        </validationFailures>
                      </queryAppointmentAvailabilityRejected>
                    </queryAppointmentAvailabilityResponse>
                  </soap:Body>
                </soap:Envelope>
    failedSchemaValidation:
      description: Failed XML Schema Validation
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/failedSchemaValidationResponse'
          examples:
            FailedSchemaValidation:
              summary: Failed XML Schema Validation Response
              value: |
                <soap:Envelope
                  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <soap:Fault>
                      <faultcode>soap:Client</faultcode>
                      <faultstring>Message failed schema validation</faultstring>
                      <detail>Element '{http://www.niccstandards.org.uk/ala_1.0.xsd}invalidnameexample': This element is not expected. (&lt;string&gt;, line 0)</detail>
                    </soap:Fault>
                  </soap:Body>
                </soap:Envelope>
    unauthorized:
      description: Unauthorized
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/unauthorizedResponse'
          examples:
            Unauthorized:
              summary: Unauthorized
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <soap:Fault>
                      <faultcode>soap:Client</faultcode>
                      <faultstring>Unauthorized</faultstring>
                    </soap:Fault>
                  </soap:Body>
                </soap:Envelope>
    unauthenticated:
      description: Unauthenticated
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/unauthenticatedResponse'
          examples:
            Unauthenticated:
              summary: Unauthenticated
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <soap:Fault>
                      <faultcode>soap:Client</faultcode>
                      <faultstring>Unauthenticated</faultstring>
                    </soap:Fault>
                  </soap:Body>
                </soap:Envelope>
    reserveAppointmentResponse:
      description: Reserve Appointment Response
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/reserveAppointmentResponse'
          examples:
            ReserveAppointmentSuccess:
              summary: Appointment reserved successfully
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <reserveAppointmentResponse xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd" xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                      <message>
                        <messageId>c6d0b303-625a-4ee3-ab53-5e616d728755</messageId>
                        <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                        <sentAt>2022-05-20T09:58:23.439Z</sentAt>
                      </message>
                      <buyer>
                        <buyerIdentifier>SPDEV1</buyerIdentifier>
                      </buyer>
                      <seller>
                        <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                      </seller>
                      <reserveAppointmentAccepted>
                        <appointment>
                          <appointmentDate>2022-05-24</appointmentDate>
                          <appointmentStartTime>08:00</appointmentStartTime>
                          <appointmentEndTime>13:00</appointmentEndTime>
                          <appointmentReservationKey>EI7PBRU6TL8KN1YNGO8ICEUI0UDFE9M8</appointmentReservationKey>
                          <appointmentReservationValidUntil>2022-05-20T21:58:26.822Z</appointmentReservationValidUntil>
                        </appointment>
                      </reserveAppointmentAccepted>
                    </reserveAppointmentResponse>
                  </soap:Body>
                </soap:Envelope>
            ReserveAppointmentRejected:
              summary: Appointment reserved unsuccessfully
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <reserveAppointmentResponse xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd" xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                      <message>
                        <messageId>fdb52dfa-bb8f-48a6-9f9c-68c93b073137</messageId>
                        <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                        <sentAt>2022-05-26T09:08:52.646Z</sentAt>
                      </message>
                      <buyer>
                        <buyerIdentifier>SPDEV1</buyerIdentifier>
                      </buyer>
                      <seller>
                        <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                      </seller>
                      <reserveAppointmentRejected>
                        <errorOther>
                          <errorCode>509</errorCode>
                          <errorMessage>Requested date before earliest installation date (2022-05-30)</errorMessage>
                        </errorOther>
                      </reserveAppointmentRejected>
                    </reserveAppointmentResponse>
                  </soap:Body>
                </soap:Envelope>
            ValidationError:
              summary: Validation Error (Invalid Project Reference Example)
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <reserveAppointmentResponse xmlns="http://www.niccstandards.org.uk/ala_1.0.xsd" xmlns:cfh="http://www.cityfibre.com/ala/ext1">
                      <message>
                        <messageId>fdb52dfa-bb8f-48a6-9f9c-68c93b073137</messageId>
                        <correlationId>bac72cfa-475e-11e1-a92e-fb2ff6467c99</correlationId>
                        <sentAt>2022-05-26T09:08:52.646Z</sentAt>
                      </message>
                      <buyer>
                        <buyerIdentifier>SPDEV1</buyerIdentifier>
                      </buyer>
                      <seller>
                        <sellerIdentifier>CITYFIBRE</sellerIdentifier>
                      </seller>
                      <reserveAppointmentRejected>
                        <validationFailures>
                          <validationFailure>
                            <validationFailureField>cfh:projectReference</validationFailureField>
                            <validationFailureMessage>511, "Unknown, invalid or expired project reference"</validationFailureMessage>
                          </validationFailure>
                        </validationFailures>
                      </reserveAppointmentRejected>
                    </reserveAppointmentResponse>
                  </soap:Body>
                </soap:Envelope>
    receivedFaultReportPending:
      description: |
        The Fault Report has been received and is pending processing
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedFaultReportPending'
          examples:
            Pending:
              summary: Fault Report has been received and is pending processing.
              value: >
                <receivedFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00001</messageId>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <status>pending</status>
                    <responseCode>201</responseCode>
                </receivedFaultReport>
    receivedFaultReportRejectedNotFound:
      description: |
        A received fault report has been rejected by the maintainer
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedFaultReportRejectedNotFound'
          examples:
            Rejected:
              summary: Fault Report has been rejected.
              value: >
                <receivedFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00001</messageId>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <status>rejected</status>
                    <responseCode>400</responseCode>
                    <errorMessage>{"maintainerFaultReference": "No workflow found with that reference"}</errorMessage>
                </receivedFaultReport>
    receivedFaultReportRejectedAppointment:
      description: A received fault report has been rejected by the appointment validator
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedFaultReportRejectedAppointment'
          examples:
            Unauthenticated:
              summary: Unauthenticated
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <soap:Fault>
                      <faultcode>soap:Client</faultcode>
                      <faultstring>Unauthenticated</faultstring>
                    </soap:Fault>
                  </soap:Body>
                </soap:Envelope>
            TotalLossOfServiceWithoutAnAppointment:
              summary: Total Loss Of Service Without An Appointment
              value: >
                <receivedFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-05-16T12:01:00Z</sentAt>
                  <messageId>SP-00001</messageId>
                  <status>rejected</status>
                  <responseCode>403</responseCode>
                  <errorMessage>{"appointmentReservationId": "An appointment is required for a total loss of service incident"}</errorMessage>
                </receivedFaultReport>
            NonTotalLossOfServiceWithAnAppointment:
              summary: Non-Total Loss Of Service With An Appointment
              value: >
                <receivedFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

                xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-05-16T12:01:00Z</sentAt>
                  <messageId>SP-00001</messageId>
                  <status>rejected</status>
                  <responseCode>403</responseCode>
                  <errorMessage>{"appointmentReservationId": "A Non-total loss of service incident can't have an appointment"}</errorMessage>
                </receivedFaultReport>
    brokenXML:
      description: Internal Server Error (Broken XML)
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/brokenXMLResponse'
          examples:
            BrokenXML:
              summary: Broken XML
              value: >
                <soap:Envelope
                xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <soap:Fault>
                      <faultcode>soap:Client</faultcode>
                      <faultstring>XML parsing error</faultstring>
                      <detail>not well-formed (invalid token): line 1, column 9</detail>
                    </soap:Fault>
                  </soap:Body>
                </soap:Envelope>
    receivedAmendFaultReport:
      description: |
        Fault Report has been received and is processing
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedAmendFaultReport'
          examples:
            Received:
              summary: Fault Report has been received and is processing.
              value: >
                <receivedAmendFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00002</messageId>
                    <buyerFaultReference>SP-123ABC</buyerFaultReference>
                    <status>accepted</status>
                    <responseCode>200</responseCode>
                </receivedAmendFaultReport>
    receivedAmendFaultReportErrors:
      description: |
        Amend Fault Report has been rejected due to an error
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedAmendFaultReportErrors'
          examples:
            Rejected:
              summary: Amend Fault Report has been rejected.
              value: >
                <receivedAmendFaultReport
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-05-16T12:01:00Z</sentAt>
                  <messageId>SP-00001</messageId>
                  <buyerFaultReference>SP-123ABC</buyerFaultReference>
                  <status>rejected</status>
                  <responseCode>400</responseCode>
                  <errorMessage>Error message example.</errorMessage>
                </receivedAmendFaultReport>
    receivedRequestFaultReportUpdate:
      description: Request Fault Report Update Response
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedFaultReportUpdateResponse'
          examples:
            ValidResponse:
              summary: Accepted
              value: >
                <receivedRequestFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00001</messageId>
                    <responseCode>200</responseCode>
                </receivedRequestFaultReportUpdate>
            Rejected:
              summary: Rejected
              value: >
                <receivedRequestFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00001</messageId>
                    <responseCode>400</responseCode>
                    <errorMessage>{"maintainerFaultReference": "No workflow found with that reference"}</errorMessage>
                </receivedRequestFaultReportUpdate>
    receivedRequestFaultReportUpdateErrors:
      description: Request Fault Report Update has been rejected due to an error
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/rejectedResponse'
          examples:
            Rejected:
              summary: Received Request Error
              value: >
                <receivedRequestFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-05-16T12:01:00Z</sentAt>
                  <messageId>SP-00001</messageId>
                  <responseCode>400</responseCode>
                  <errorMessage>Error message example.</errorMessage>
                </receivedRequestFaultReportUpdate>
    receivedResolveResponse:
      description: Resolve Response Received
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedResolveResponse'
          examples:
            ValidResponse:
              summary: Received
              value: >
                <receivedResolvedResponse
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00004</messageId>
                    <responseCode>200</responseCode>
                </receivedResolvedResponse>
    receivedResolveResponseErrors:
      description: Resolve Response has been rejected due to an error
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/rejectedResponse'
          examples:
            Rejected:
              summary: Resolve Response Error
              value: >
                <receivedResolvedResponse
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                  <apiVersion>1.0</apiVersion>
                  <buyerIdentifier>SPDEV1</buyerIdentifier>
                  <sentAt>2018-05-16T12:01:00Z</sentAt>
                  <messageId>SP-00001</messageId>
                  <responseCode>400</responseCode>
                  <errorMessage>Error message example.</errorMessage>
                </receivedResolvedResponse>
    notifyFaultReportUpdate:
      description: Notify Fault Report Update Response
      content:
        application/xml:
          schema:
            $ref: '#/components/schemas/receivedFaultReportUpdateResponse'
          examples:
            ValidResponse:
              summary: Accepted
              value: >
                <receivedNotifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00001</messageId>
                    <responseCode>200</responseCode>
                </receivedRequestFaultReportUpdate>
            Rejected:
              summary: Rejected
              value: >
                <receivedNotifyFaultReportUpdate
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xsi:noNamespaceSchemaLocation="../faultReport.xsd">
                    <apiVersion>1.0</apiVersion>
                    <buyerIdentifier>SPDEV1</buyerIdentifier>
                    <sentAt>2018-05-16T12:01:00Z</sentAt>
                    <messageId>SP-00001</messageId>
                    <responseCode>400</responseCode>
                    <errorMessage>{"maintainerFaultReference": "No workflow found with that reference"}</errorMessage>
                </receivedRequestFaultReportUpdate>
