<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
    name="CoreBankingAccountService"
    targetNamespace="https://soap.uat.digitalapi.ai/corebanking/AccountService"
    xmlns:tns="https://soap.uat.digitalapi.ai/corebanking/AccountService"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

  <wsdl:documentation>
    Core Banking Account Service. Account enquiries, balances and statement
    retrieval for channels that integrate over SOAP rather than REST.
  </wsdl:documentation>

  <wsdl:types>
    <xsd:schema targetNamespace="https://soap.uat.digitalapi.ai/corebanking/AccountService"
                elementFormDefault="qualified">

      <xsd:element name="GetAccountRequest">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="accountId" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:element name="GetAccountResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="account" type="tns:Account"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:element name="GetBalanceRequest">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="accountId" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:element name="GetBalanceResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="currentBalance" type="xsd:decimal"/>
            <xsd:element name="availableBalance" type="xsd:decimal"/>
            <xsd:element name="currency" type="xsd:string"/>
            <xsd:element name="asOf" type="xsd:dateTime"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:element name="GetStatementRequest">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="accountId" type="xsd:string"/>
            <xsd:element name="fromDate" type="xsd:date"/>
            <xsd:element name="toDate" type="xsd:date"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:element name="GetStatementResponse">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="entry" type="tns:StatementEntry" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:element name="ServiceFault">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="code" type="xsd:string"/>
            <xsd:element name="message" type="xsd:string"/>
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>

      <xsd:complexType name="Account">
        <xsd:sequence>
          <xsd:element name="accountId" type="xsd:string"/>
          <xsd:element name="displayName" type="xsd:string"/>
          <xsd:element name="accountType" type="xsd:string"/>
          <xsd:element name="iban" type="xsd:string" minOccurs="0"/>
          <xsd:element name="currency" type="xsd:string"/>
          <xsd:element name="status" type="xsd:string"/>
          <xsd:element name="openedOn" type="xsd:date"/>
        </xsd:sequence>
      </xsd:complexType>

      <xsd:complexType name="StatementEntry">
        <xsd:sequence>
          <xsd:element name="bookingDate" type="xsd:date"/>
          <xsd:element name="valueDate" type="xsd:date"/>
          <xsd:element name="description" type="xsd:string"/>
          <xsd:element name="amount" type="xsd:decimal"/>
          <xsd:element name="currency" type="xsd:string"/>
          <xsd:element name="runningBalance" type="xsd:decimal"/>
        </xsd:sequence>
      </xsd:complexType>

    </xsd:schema>
  </wsdl:types>

  <wsdl:message name="GetAccountRequest">
    <wsdl:part name="parameters" element="tns:GetAccountRequest"/>
  </wsdl:message>
  <wsdl:message name="GetAccountResponse">
    <wsdl:part name="parameters" element="tns:GetAccountResponse"/>
  </wsdl:message>
  <wsdl:message name="GetBalanceRequest">
    <wsdl:part name="parameters" element="tns:GetBalanceRequest"/>
  </wsdl:message>
  <wsdl:message name="GetBalanceResponse">
    <wsdl:part name="parameters" element="tns:GetBalanceResponse"/>
  </wsdl:message>
  <wsdl:message name="GetStatementRequest">
    <wsdl:part name="parameters" element="tns:GetStatementRequest"/>
  </wsdl:message>
  <wsdl:message name="GetStatementResponse">
    <wsdl:part name="parameters" element="tns:GetStatementResponse"/>
  </wsdl:message>
  <wsdl:message name="ServiceFault">
    <wsdl:part name="fault" element="tns:ServiceFault"/>
  </wsdl:message>

  <wsdl:portType name="AccountServicePortType">
    <wsdl:operation name="GetAccount">
      <wsdl:documentation>Returns the account master record.</wsdl:documentation>
      <wsdl:input message="tns:GetAccountRequest"/>
      <wsdl:output message="tns:GetAccountResponse"/>
      <wsdl:fault name="ServiceFault" message="tns:ServiceFault"/>
    </wsdl:operation>
    <wsdl:operation name="GetBalance">
      <wsdl:documentation>Returns current and available balance.</wsdl:documentation>
      <wsdl:input message="tns:GetBalanceRequest"/>
      <wsdl:output message="tns:GetBalanceResponse"/>
      <wsdl:fault name="ServiceFault" message="tns:ServiceFault"/>
    </wsdl:operation>
    <wsdl:operation name="GetStatement">
      <wsdl:documentation>Returns booked entries for a date range.</wsdl:documentation>
      <wsdl:input message="tns:GetStatementRequest"/>
      <wsdl:output message="tns:GetStatementResponse"/>
      <wsdl:fault name="ServiceFault" message="tns:ServiceFault"/>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="AccountServiceSoap12Binding" type="tns:AccountServicePortType">
    <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="GetAccount">
      <soap12:operation soapAction="urn:GetAccount" style="document"/>
      <wsdl:input><soap12:body use="literal"/></wsdl:input>
      <wsdl:output><soap12:body use="literal"/></wsdl:output>
      <wsdl:fault name="ServiceFault"><soap12:fault name="ServiceFault" use="literal"/></wsdl:fault>
    </wsdl:operation>
    <wsdl:operation name="GetBalance">
      <soap12:operation soapAction="urn:GetBalance" style="document"/>
      <wsdl:input><soap12:body use="literal"/></wsdl:input>
      <wsdl:output><soap12:body use="literal"/></wsdl:output>
      <wsdl:fault name="ServiceFault"><soap12:fault name="ServiceFault" use="literal"/></wsdl:fault>
    </wsdl:operation>
    <wsdl:operation name="GetStatement">
      <soap12:operation soapAction="urn:GetStatement" style="document"/>
      <wsdl:input><soap12:body use="literal"/></wsdl:input>
      <wsdl:output><soap12:body use="literal"/></wsdl:output>
      <wsdl:fault name="ServiceFault"><soap12:fault name="ServiceFault" use="literal"/></wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>

  <wsdl:service name="CoreBankingAccountService">
    <wsdl:documentation>Core banking account enquiry endpoint.</wsdl:documentation>
    <wsdl:port name="AccountServiceSoap12" binding="tns:AccountServiceSoap12Binding">
      <soap12:address location="https://soap.uat.digitalapi.ai/corebanking/AccountService"/>
    </wsdl:port>
  </wsdl:service>

</wsdl:definitions>
