Browse Source

transit.md

master
Nikolay Ushmodin 4 years ago
parent
commit
447bdbce06
  1. 13
      README.md
  2. 172
      avs5rs.jmx
  3. 635
      avs5rs.xsd
  4. 76
      avs5rs_common.xsd
  5. 238
      avs5rs_sale.xsd
  6. 474
      transit.md

13
README.md

@ -3,7 +3,7 @@
**Версия документа: 2.0**
**Дата изменения: 01.05.2017**
**Дата изменения: 06.09.2017**
Введение
========
@ -79,7 +79,7 @@ XML-ответ в обязательном порядке имеет корне
Пример ответа в случае успешной обработки запроса:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<EchoResponse>
<Body>
<message>Test</message>
@ -867,6 +867,10 @@ bookOrder или updateTicket. Вызов этого метода означае
то обработка первого должна быть отменена.
Можно выполнять после создания заказа и в течении 5-30 минут
после подтверждения заказа.
При интеграции с сервисом GDS гарантируется,
что переданные ticketId будут принадлежать одному заказу.
Решение допускать ли передачу Id билетов из разных заказов остается за вокзалом,
который реализует данный протокол.
**URL: \[BASE\_URL\]/sales/cancelTicket**
@ -900,6 +904,11 @@ bookOrder или updateTicket. Вызов этого метода означае
т.е. если было передано 2 билета, первый был обработан а при обработке второго возникла ошибка
то обработка первого должна быть отменена.
Билет можно вернуть только после подтверждения confirmOrder.
При интеграции с сервисом GDS гарантируется,
что переданные ticketId будут принадлежать одному заказу.
Решение допускать ли передачу Id билетов из разных заказов остается за вокзалом,
который реализует данный протокол.
**URL: \[BASE\_URL\]/sales/returnTicket**

172
avs5rs.jmx

@ -12,7 +12,7 @@
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<stringProp name="ThreadGroup.on_sample_error">startnextloop</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp>
@ -28,24 +28,24 @@
<hashTree>
<Arguments guiclass="ArgumentsPanel" testclass="Arguments" testname="User Defined Variables" enabled="true">
<collectionProp name="Arguments.arguments">
<elementProp name="server" elementType="Argument">
<stringProp name="Argument.name">server</stringProp>
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="user" elementType="Argument">
<stringProp name="Argument.name">user</stringProp>
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="password" elementType="Argument">
<stringProp name="Argument.name">password</stringProp>
<stringProp name="Argument.value"></stringProp>
<stringProp name="Argument.value">${__P(password)}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="date" elementType="Argument">
<stringProp name="Argument.name">date</stringProp>
<stringProp name="Argument.value">2017-03-14</stringProp>
<stringProp name="Argument.value">${__P(date)}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="user" elementType="Argument">
<stringProp name="Argument.name">user</stringProp>
<stringProp name="Argument.value">${__P(user)}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
<elementProp name="server" elementType="Argument">
<stringProp name="Argument.name">server</stringProp>
<stringProp name="Argument.value">${__P(server)}</stringProp>
<stringProp name="Argument.metadata">=</stringProp>
</elementProp>
</collectionProp>
@ -88,6 +88,11 @@
</collectionProp>
</HeaderManager>
<hashTree/>
<CookieManager guiclass="CookiePanel" testclass="CookieManager" testname="HTTP Cookie Manager" enabled="true">
<collectionProp name="CookieManager.cookies"/>
<boolProp name="CookieManager.clearEachIteration">false</boolProp>
</CookieManager>
<hashTree/>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="echo" enabled="true">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
@ -107,7 +112,7 @@
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol"></stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.contentEncoding">UTF-8</stringProp>
<stringProp name="HTTPSampler.path">${__V(server)}/sales/echo</stringProp>
<stringProp name="HTTPSampler.method">POST</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
@ -118,7 +123,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Проверка ответа" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -159,7 +164,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во станций &gt; 0" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -216,16 +221,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во станций &gt; 0" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
<stringProp name="XPath.xpath">count(/GetArrivalStationsResponse/Body/Station)&gt;0</stringProp>
<boolProp name="XPath.validate">false</boolProp>
<boolProp name="XPath.whitespace">false</boolProp>
<boolProp name="XPath.tolerant">false</boolProp>
<boolProp name="XPath.namespace">false</boolProp>
</XPathAssertion>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Получить все ID станций" enabled="true">
<stringProp name="XPathExtractor.default"></stringProp>
@ -243,7 +239,7 @@
<boolProp name="ForeachController.useSeparator">true</boolProp>
</ForeachController>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="searchTrips" enabled="true">
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="searchTrips" enabled="false">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
<collectionProp name="Arguments.arguments">
@ -276,7 +272,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Получить все ID рейсов" enabled="true">
<stringProp name="XPathExtractor.default"></stringProp>
@ -288,7 +284,7 @@
</XPathExtractor>
<hashTree/>
</hashTree>
<ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="Для каждого рейса" enabled="true">
<ForeachController guiclass="ForeachControlPanel" testclass="ForeachController" testname="Для каждого рейса" enabled="false">
<stringProp name="ForeachController.inputVal">tripIds</stringProp>
<stringProp name="ForeachController.returnVal">tripId</stringProp>
<boolProp name="ForeachController.useSeparator">true</boolProp>
@ -325,7 +321,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во остановок &gt; 0" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -369,7 +365,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во типов билетов &gt; 0" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -422,7 +418,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во типов документов &gt; 0" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -486,7 +482,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Получить все ID мест" enabled="true">
<stringProp name="XPathExtractor.default"></stringProp>
@ -497,6 +493,15 @@
<boolProp name="XPathExtractor.namespace">false</boolProp>
</XPathExtractor>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Есть места" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
<stringProp name="XPath.xpath">count(/GetFreeSeatsResponse/Body/Seat)&gt;0</stringProp>
<boolProp name="XPath.validate">false</boolProp>
<boolProp name="XPath.whitespace">false</boolProp>
<boolProp name="XPath.tolerant">false</boolProp>
<boolProp name="XPath.namespace">false</boolProp>
</XPathAssertion>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Создание договора" enabled="true">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
@ -510,7 +515,7 @@
&lt;dispatchStationId&gt;${dispatchStationId}&lt;/dispatchStationId&gt;&#xd;
&lt;arrivalStationId&gt;${arrivalStationId}&lt;/arrivalStationId&gt; &#xd;
&lt;Sale&gt;&#xd;
&lt;seatId&gt;${seatId}&lt;/seatId&gt;&#xd;
&lt;seatId&gt;${__V(seatId_${__Random(1,${seatId_matchNr})})}&lt;/seatId&gt;&#xd;
&lt;ticketTypeId&gt;${ticketTypeIds_1}&lt;/ticketTypeId&gt;&#xd;
&lt;Passenger&gt;&#xd;
&lt;firstName&gt;${__RandomString(10,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz)}&lt;/firstName&gt;&#xd;
@ -545,7 +550,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Получить ID договора" enabled="true">
<stringProp name="XPathExtractor.default"></stringProp>
@ -587,7 +592,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во билетов = 1" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -667,7 +672,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Подтверждение оплаты" enabled="true">
@ -700,7 +705,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во билетов = 1" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -760,7 +765,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во билетов = 1" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -816,7 +821,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Получить все ID мест" enabled="true">
<stringProp name="XPathExtractor.default"></stringProp>
@ -827,6 +832,15 @@
<boolProp name="XPathExtractor.namespace">false</boolProp>
</XPathExtractor>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Есть места" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
<stringProp name="XPath.xpath">count(/GetFreeSeatsResponse/Body/Seat)&gt;1</stringProp>
<boolProp name="XPath.validate">false</boolProp>
<boolProp name="XPath.whitespace">false</boolProp>
<boolProp name="XPath.tolerant">false</boolProp>
<boolProp name="XPath.namespace">false</boolProp>
</XPathAssertion>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Создание договора" enabled="true">
<boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
@ -840,7 +854,7 @@
&lt;dispatchStationId&gt;${dispatchStationId}&lt;/dispatchStationId&gt;&#xd;
&lt;arrivalStationId&gt;${arrivalStationId}&lt;/arrivalStationId&gt; &#xd;
&lt;Sale&gt;&#xd;
&lt;seatId&gt;${seatId}&lt;/seatId&gt;&#xd;
&lt;seatId&gt;${__V(seatId_${__Random(1,${seatId_matchNr})})}&lt;/seatId&gt;&#xd;
&lt;ticketTypeId&gt;${ticketTypeIds_1}&lt;/ticketTypeId&gt;&#xd;
&lt;Passenger&gt;&#xd;
&lt;firstName&gt;${__RandomString(10,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz)}&lt;/firstName&gt;&#xd;
@ -875,7 +889,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathExtractor guiclass="XPathExtractorGui" testclass="XPathExtractor" testname="Получить ID договора" enabled="true">
<stringProp name="XPathExtractor.default"></stringProp>
@ -917,7 +931,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во билетов = 1" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -997,7 +1011,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
</hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Подтверждение оплаты" enabled="true">
@ -1030,7 +1044,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во билетов = 1" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -1090,7 +1104,7 @@
<stringProp name="HTTPSampler.embedded_url_re"></stringProp>
</HTTPSamplerProxy>
<hashTree>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="true"/>
<XMLAssertion guiclass="XMLAssertionGui" testclass="XMLAssertion" testname="Это XML?" enabled="false"/>
<hashTree/>
<XPathAssertion guiclass="XPathAssertionGui" testclass="XPathAssertion" testname="Кол-во билетов = 1" enabled="true">
<boolProp name="XPath.negate">false</boolProp>
@ -1154,6 +1168,72 @@
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="StatVisualizer" testclass="ResultCollector" testname="Aggregate Report" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<threadCounts>true</threadCounts>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
<ResultCollector guiclass="StatGraphVisualizer" testclass="ResultCollector" testname="Aggregate Graph" enabled="true">
<boolProp name="ResultCollector.error_logging">false</boolProp>
<objProp>
<name>saveConfig</name>
<value class="SampleSaveConfiguration">
<time>true</time>
<latency>true</latency>
<timestamp>true</timestamp>
<success>true</success>
<label>true</label>
<code>true</code>
<message>true</message>
<threadName>true</threadName>
<dataType>true</dataType>
<encoding>false</encoding>
<assertions>true</assertions>
<subresults>true</subresults>
<responseData>false</responseData>
<samplerData>false</samplerData>
<xml>false</xml>
<fieldNames>false</fieldNames>
<responseHeaders>false</responseHeaders>
<requestHeaders>false</requestHeaders>
<responseDataOnError>false</responseDataOnError>
<saveAssertionResultsFailureMessage>false</saveAssertionResultsFailureMessage>
<assertionsResultsToSave>0</assertionsResultsToSave>
<bytes>true</bytes>
<threadCounts>true</threadCounts>
</value>
</objProp>
<stringProp name="filename"></stringProp>
</ResultCollector>
<hashTree/>
</hashTree>
</hashTree>
</hashTree>

635
avs5rs.xsd

@ -1,635 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="qualified">
<xs:simpleType name="IDType">
<xs:restriction base="xs:string">
<xs:maxLength value="36"/>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NameType">
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OkatoType">
<xs:restriction base="xs:string">
<xs:length value="11"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="InnType">
<xs:restriction base="xs:string">
<xs:maxLength value="12"/>
<xs:minLength value="10"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SimpleStringType">
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="AbstractResponse">
<xs:sequence>
<xs:element name="Error" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="code" type="xs:string" minOccurs="1"/>
<xs:element name="message" type="xs:string" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Station">
<xs:sequence>
<xs:element name="id" type="IDType" minOccurs="1"/>
<xs:element name="name" type="NameType" minOccurs="1"/>
<xs:element name="okato" type="OkatoType" minOccurs="0"/>
<xs:element name="region" type="SimpleStringType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="TripType">
<xs:restriction base="xs:string">
<xs:enumeration value="INTERNATIONAL"/>
<xs:enumeration value="INTERREGIONAL"/>
<xs:enumeration value="ADJACENT_INTERREGIONAL"/>
<xs:enumeration value="INTERMUNICIPAL"/>
<xs:enumeration value="MUNICIPAL"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TripStatus">
<xs:restriction base="xs:string">
<xs:enumeration value="ON_SALE"/>
<xs:enumeration value="SUSPENDED"/>
<xs:enumeration value="CANCELED"/>
<xs:enumeration value="DISPATCHED"/>
<xs:enumeration value="UNKNOWN"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TripClass">
<xs:restriction base="xs:string">
<xs:enumeration value="REGULAR"/>
<xs:enumeration value="CUSTOM"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TicketClass">
<xs:restriction base="xs:string">
<xs:enumeration value="PASSENGER"/>
<xs:enumeration value="BAGGAGE"/>
<xs:enumeration value="WITHOUT_SEAT"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="GenderType">
<xs:restriction base="xs:string">
<xs:enumeration value="MALE"/>
<xs:enumeration value="FEMALE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ErrorCode">
<xs:restriction base="xs:string">
<xs:enumeration value="INTERNAL"/>
<xs:enumeration value="NOT_FOUND"/>
<xs:enumeration value="SEAT_OCCUPIED"/>
<xs:enumeration value="PERSONAL_DATA_INCORRECT"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="TicketStatus">
<xs:restriction base="xs:string">
<xs:enumeration value="RESERVED"/>
<xs:enumeration value="SOLD"/>
<xs:enumeration value="CANCELED"/>
<xs:enumeration value="RETURNED"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UidType">
<xs:restriction base="xs:string">
<xs:length value="36"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="RouteKey">
<xs:sequence>
<xs:element name="dispatchStationUid" type="UidType"/>
<xs:element name="arrivalStationUid" type="UidType"/>
<xs:element name="dispatchTime" type="xs:time"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Trip">
<xs:sequence>
<xs:element name="id" type="IDType" minOccurs="1"/>
<xs:element name="name" type="NameType" minOccurs="1"/>
<xs:element name="num" type="xs:string" minOccurs="0"/>
<xs:element name="dispatchDate" type="xs:dateTime" minOccurs="1"/>
<xs:element name="arrivalDate" type="xs:dateTime" minOccurs="1"/>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="dispatchStationName" type="NameType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationName" type="NameType" minOccurs="1"/>
<xs:element name="price" type="xs:decimal" minOccurs="1"/>
<xs:element name="carrierName" type="NameType" minOccurs="0"/>
<xs:element name="carrierInn" type="InnType" minOccurs="1"/>
<xs:element name="busInfo" type="xs:string" minOccurs="1"/>
<xs:element name="platform" type="xs:string" minOccurs="0"/>
<xs:element name="type" type="TripType" minOccurs="1"/>
<xs:element name="status" type="TripStatus" minOccurs="1"/>
<xs:element name="tripClass" type="TripClass" minOccurs="0"/>
<xs:element name="seatCount" type="xs:int" minOccurs="1"/>
<xs:element name="freeSeatCount" type="xs:int" minOccurs="1"/>
<xs:element name="routeKey" type="RouteKey" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Seat">
<xs:sequence>
<xs:element name="id" type="IDType" minOccurs="1"/>
<xs:element name="num" type="xs:int" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Passenger">
<xs:sequence>
<xs:element name="firstName" type="xs:string" minOccurs="1"/>
<xs:element name="lastName" type="xs:string" minOccurs="1"/>
<xs:element name="middleName" type="xs:string" minOccurs="0"/>
<xs:element name="docNum" type="xs:string" minOccurs="0"/>
<xs:element name="docSeries" type="xs:string" minOccurs="0"/>
<xs:element name="docTypeId" type="IDType" minOccurs="1"/>
<xs:element name="birthday" type="xs:date" minOccurs="0"/>
<xs:element name="citizenshipISO2" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="gender" type="GenderType" minOccurs="0"/>
<xs:element name="phone" type="xs:string" minOccurs="0"/>
<xs:element name="info" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Sale">
<xs:sequence>
<xs:element name="seatId" type="IDType" minOccurs="0"/>
<xs:element name="ticketTypeId" type="IDType" minOccurs="1"/>
<xs:element name="Passenger" type="Passenger" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TripStop">
<xs:sequence>
<xs:element name="id" type="IDType" minOccurs="1"/>
<xs:element name="name" type="NameType" minOccurs="1"/>
<xs:element name="regionName" type="NameType" minOccurs="0"/>
<xs:element name="dispatchDate" type="xs:dateTime" minOccurs="1"/>
<xs:element name="arrivalDate" type="xs:dateTime" minOccurs="1"/>
<xs:element name="stopTime" type="xs:int" minOccurs="0"/>
<xs:element name="distance" type="xs:int" minOccurs="0"/>
<xs:element name="price" type="xs:decimal" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TicketType">
<xs:sequence>
<xs:element name="id" type="IDType" minOccurs="1"/>
<xs:element name="name" type="NameType" minOccurs="1"/>
<xs:element name="price" type="xs:decimal" minOccurs="1"/>
<xs:element name="ticketClass" type="TicketClass" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DocumentType">
<xs:sequence>
<xs:element name="id" type="IDType" minOccurs="1"/>
<xs:element name="name" type="NameType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Agent">
<xs:sequence>
<xs:element name="name" type="NameType" minOccurs="0"/>
<xs:element name="inn" type="InnType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Ticket">
<xs:sequence>
<xs:element name="id" type="IDType" minOccurs="1"/>
<xs:element name="number" type="xs:string" minOccurs="0"/>
<xs:element name="series" type="xs:string" minOccurs="0"/>
<xs:element name="created" type="xs:dateTime" minOccurs="1"/>
<xs:element name="returned" type="xs:dateTime" minOccurs="1"/>
<xs:element name="status" type="TicketStatus" minOccurs="1"/>
<xs:element name="ticketClass" type="TicketClass" minOccurs="1"/>
<xs:element name="typeId" type="IDType" minOccurs="1"/>
<xs:element name="routeNum" type="xs:string" minOccurs="0"/>
<xs:element name="routeName" type="NameType" minOccurs="1"/>
<xs:element name="busInfo" type="xs:string" minOccurs="1"/>
<xs:element name="carrierName" type="xs:string" minOccurs="0"/>
<xs:element name="carrierInn" type="InnType" minOccurs="1"/>
<xs:element name="platform" type="xs:string" minOccurs="0"/>
<xs:element name="dispatchDate" type="xs:dateTime" minOccurs="1"/>
<xs:element name="arrivalDate" type="xs:dateTime" minOccurs="1"/>
<xs:element name="dispatchStation" type="xs:string" minOccurs="1"/>
<xs:element name="arrivalStation" type="xs:string" minOccurs="1"/>
<xs:element name="seatNum" type="xs:int" minOccurs="1"/>
<xs:element name="Passenger" type="Passenger" minOccurs="0"/>
<xs:element name="fare" type="xs:decimal" minOccurs="1"/>
<xs:element name="fees" type="xs:decimal" minOccurs="1"/>
<xs:element name="repayment" type="xs:decimal" minOccurs="0"/>
<xs:element name="insuranceInfo" type="xs:string" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="EchoRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="message" type="xs:string" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="EchoResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="message" minOccurs="1" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="GetDispatchStationsRequest">
<xs:complexType>
</xs:complexType>
</xs:element>
<xs:element name="GetDispatchStationsResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="Station" type="Station" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="GetArrivalStationsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetArrivalStationsResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="Station" type="Station" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="SearchTripsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
<xs:element name="date" type="xs:date" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SearchTripsResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="Trip" type="Trip" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="GetFreeSeatsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="tripId" type="IDType" minOccurs="1"/>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetFreeSeatsResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="Seat" type="Seat" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="GetTicketTypesRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="tripId" type="IDType" minOccurs="1"/>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetTicketTypesResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="TicketType" type="TicketType" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="GetDocumentTypesRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="tripId" type="IDType" minOccurs="1"/>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetDocumentTypesResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="DocumentType" type="DocumentType" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="GetTripStopsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="tripId" type="IDType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetTripStopsResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="Stop" type="TripStop" maxOccurs="unbounded" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="BookOrderRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="tripId" type="IDType" minOccurs="1"/>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
<xs:element name="Sale" type="Sale" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="BookOrderResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="orderId" type="IDType" minOccurs="1"/>
<xs:element name="lifetime" type="xs:int" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="GetOrderRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="orderId" type="IDType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="GetOrderResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="orderId" type="IDType" minOccurs="1"/>
<xs:element name="Ticket" type="Ticket" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ConfirmOrderRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="orderId" type="IDType" minOccurs="1"/>
<xs:element name="Agent" type="Agent" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ConfirmOrderResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="orderId" type="IDType" minOccurs="1"/>
<xs:element name="Ticket" type="Ticket" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="CancelTicketRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="ticketId" type="IDType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="Agent" type="Agent" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CancelTicketResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="orderId" type="IDType" minOccurs="1"/>
<xs:element name="Ticket" type="Ticket" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="ReturnTicketRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="ticketId" type="IDType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="Agent" type="Agent" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="ReturnTicketResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="orderId" type="IDType" minOccurs="1"/>
<xs:element name="Ticket" type="Ticket" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="UpdateTicketRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="ticketId" type="IDType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="Passenger" type="Passenger" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="UpdateTicketResponse">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="AbstractResponse"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>

76
avs5rs_common.xsd

@ -1,76 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="qualified">
<xs:simpleType name="IDType">
<xs:restriction base="xs:string">
<xs:maxLength value="36"/>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NameType">
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="OkatoType">
<xs:restriction base="xs:string">
<xs:length value="11"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="InnType">
<xs:restriction base="xs:string">
<xs:maxLength value="12"/>
<xs:minLength value="10"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SimpleStringType">
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
<xs:minLength value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="AbstractResponse">
<xs:sequence>
<xs:element name="Error" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="code" type="xs:string" minOccurs="1"/>
<xs:element name="message" type="xs:string" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="UidType">
<xs:restriction base="xs:string">
<xs:length value="36"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="RouteKey">
<xs:sequence>
<xs:element name="dispatchStationUid" type="UidType"/>
<xs:element name="arrivalStationUid" type="UidType"/>
<xs:element name="dispatchTime" type="xs:time"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Agent">
<xs:sequence>
<xs:element name="name" type="NameType" minOccurs="0"/>
<xs:element name="inn" type="InnType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

238
avs5rs_sale.xsd

@ -366,11 +366,19 @@
<xs:element name="GetFreeSeatsRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="tripId" type="IDType" minOccurs="1"/>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
</xs:sequence>
<xs:choice>
<xs:sequence>
<xs:element name="RouteKey" type="RouteKey"/>
<xs:element name="date" type="xs:date"/>
<xs:element name="dispatchStationUid" type="UidType"/>
<xs:element name="arrivalStationUid" type="UidType"/>
</xs:sequence>
<xs:sequence>
<xs:element name="tripId" type="IDType" minOccurs="1"/>
<xs:element name="dispatchStationId" type="IDType" minOccurs="1"/>
<xs:element name="arrivalStationId" type="IDType" minOccurs="1"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
@ -381,9 +389,10 @@
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name="Seat" type="Seat" maxOccurs="unbounded"/>
</xs:sequence>
<xs:element name="TransitSeat" type="TransitSeat" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
@ -631,4 +640,219 @@
</xs:complexType>
</xs:element>
<xs:element name="SetStationInfoRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="stationId" type="IDType" minOccurs="1"/>
<xs:element name="uid" type="UidType" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SetStationInfoResponse">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="AbstractResponse"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="TransitSeat">
<xs:sequence>
<xs:element name="seatId" type="IDType" minOccurs="1"/>
<xs:element name="seatNum" type="xs:int" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:element name="TransitBookRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="RouteKey" type="RouteKey"/>
<xs:element name="dispatchStationUid" type="UidType"/>
<xs:element name="arrivalStationUid" type="UidType"/>
<xs:element name="date" type="xs:date"/>
<xs:element name="seatId" type="IDType" maxOccurs="unbounded" minOccurs="1"/>
<xs:element name="Agent" type="Agent" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TransitBookResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="TransitTicket" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ticketId" type="IDType" minOccurs="1"/>
<xs:element name="seatNum" type="xs:int" minOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:simpleType name="RelationType">
<xs:restriction base="xs:string">
<xs:enumeration value="OWN"/>
<xs:enumeration value="AGENT"/>
<xs:enumeration value="ATP"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="TransitConfirmRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="RouteKey" type="RouteKey"/>
<xs:element name="ticketId" type="IDType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="Ticket" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="ticketId" type="IDType" minOccurs="1" maxOccurs="1"/>
<xs:element name="Passenger" type="Passenger" minOccurs="0"/>
<xs:element name="ticketSeries" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="ticketNumber" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="price" type="xs:decimal" minOccurs="1" maxOccurs="1"/>
<xs:element name="relation" type="RelationType" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Agent" type="Agent" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TransitConfirmResponse">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="AbstractResponse"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="TransitCancelRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="RouteKey" type="RouteKey"/>
<xs:element name="ticketId" type="IDType" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="Agent" type="Agent" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TransitCancelResponse">
<xs:complexType>
<xs:complexContent>
<xs:restriction base="AbstractResponse"/>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:complexType name="CarrierType">
<xs:sequence>
<xs:element name="name" type="SimpleStringType" minOccurs="0"/>
<xs:element name="inn" type="InnType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="TransitTripInfoRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="RouteKey" type="RouteKey"/>
<xs:element name="date" type="xs:date"/>
<xs:element name="dispatchStationUid" type="UidType" minOccurs="0"/>
<xs:element name="arrivalStationUid" type="UidType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="TransitTicket">
<xs:sequence>
<xs:element name="dispatchStationUid" type="UidType"/>
<xs:element name="dispatchStationName" type="SimpleStringType"/>
<xs:element name="arrivalStationUid" type="UidType"/>
<xs:element name="arrivalStationName" type="SimpleStringType"/>
<xs:element name="Passenger" type="Passenger"/>
<xs:element name="ticketId" type="IDType" minOccurs="1"/>
<xs:element name="ticketSeries" type="xs:string" minOccurs="0" maxOccurs="1"/>
<xs:element name="ticketNumber" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="seatNum" type="xs:int" minOccurs="1"/>
<xs:element name="Agent" type="Agent"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
<xs:element name="TransitTripInfoResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="Ticket" type="TransitTicket" maxOccurs="unbounded"/>
<xs:element name="maxSeats" type="xs:int"/>
<xs:element name="freeSeats" type="xs:int"/>
<xs:element name="Carrier" type="CarrierType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
<xs:element name="TransitRouteInfoRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="RouteKey" type="RouteKey"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="RouteItem">
<xs:sequence>
<xs:element name="order" type="xs:int"/>
<xs:element name="stationName" type="SimpleStringType"/>
<xs:element name="stationUid" type="UidType"/>
<xs:element name="distance" type="xs:integer"/>
<xs:element name="arrivalTime" type="xs:time"/>
<xs:element name="dispatchTime" type="xs:time"/>
</xs:sequence>
</xs:complexType>
<xs:element name="TransitRouteInfoResponse">
<xs:complexType>
<xs:complexContent>
<xs:extension base="AbstractResponse">
<xs:sequence>
<xs:element name="Body">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="SimpleStringType"/>
<xs:element name="RouteItem" type="RouteItem" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:element>
</xs:schema>

474
transit.md

@ -0,0 +1,474 @@
Спецификация на протокол AVS5RS взаимной продажи билетов на транзиные рейсы
===========================================================================
**Версия документа: 1.0**
**Дата изменения: 06.09.2017**
Введение
========
Данный документ содержит спецификацию протокола AVS5RS, предназначенного
для организации взаимной продажи билетов меджу автовокзалами на транзитные рейсы.
Для унификации в протоколе используются термины UID остановочного пункта и ключ маршрута.
UID остановочного пункта это ID станции одинаковый на всех вокзалах.
Ключ маршрута это структура состоящая из:
* UID начальной станции
* UID конечной станции
* время выхода из начальной станции
Описание протокола
==================
Общие сведения
--------------
Обмен данными в протоколе AVS5RS производится через протокол HTTP.
Передача и прием данных производится в формате XML, с использованием
кодировки UTF-8.
Все запросы оправляются методом POST. Каждый метод протокола реализуется
через отдельный URL, который строится относительно базового адреса
сервиса, далее обозначаемого как \[BASE\_URL\].
Доступ к веб-сервису, реализующему протокол AVS5RS, должен быть закрыт с
применением Basic-аутентификации. Допускается использование протокола
HTTPS, контроля доступа по IP, передача данных через VPN-соединение.
Общие форматы данных:
---------------------
Формат даты: `yyyy-MM-dd`, формат даты и времени:
`yyyy-MM-dd'T'HH:mm:ss`. Пример:
2016-09-07T13:10:00 (символ T латинский, обязательный) (секунды
обязательны). Время указано в часовом поясе сервера который
предоставляет контент.
Числа с плавающий точко в качестве разделителя используют точку.
Дробная часть не обязательна и не более 2 знаков.
Все идентификаторы сущностей (id и uid) это строки, произвольного формата, длинной до 36 символов.
Разрешенные символы: цифры, латинские буквы в любом регистре, и символы -={}[]$
Могут быть как искусственными (sequence) так и реальными значениями (номер билета, номер места и.т.д.)
Форматы данных XML
------------------
Ответы с сервера должны поступать по протоколу HTTP c кодом 200 и
HTTP-заголовком “Content-Type”, имеющим значение “application/xml; charset=UTF-8”.
Тело XML- ответа должно начинаться с объявления
`<?xml version="1.0" encoding="UTF-8"?>`. Регистр
названий тегов и атрибутов должен совпадать с регистром из примеров.
XML-ответ в обязательном порядке имеет корневой тег, название которого
должно соответствовать формату "&lt;НазваниеМетодаResponse&gt;" (например EchoResponse, SearchTripsResponse)
Если ответ корректный, то данные ответа содержатся во вложенном теге &lt;Body&gt;.
Если ответ не корректный, информация об ошибке должна находиться во
вложенном теге &lt;Error&gt;, который состоит из кода ошибки в теге
&lt;code&gt; и описания ошибки в теге &lt;message&gt;. Код ошибок в приложении.
Описание - это произвольные текст на русском языке,
поясняющий причину ошибки. Некоторые методы допускают пустой ответ.
Пустой ответ содержит только корневой тег.
Пустой ответ:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<UpdateTicketResponse>
</UpdateTicketResponse>
```
Пример ответа в случае успешной обработки запроса:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<EchoResponse>
<Body>
<message>Test</message>
</Body>
</EchoResponse>
```
Пример ответа в случае обработки запроса с ошибкой:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<BookResponse>
<Error>
<code>ERROR</code>
<message>Место 5 занято</message>
</Error>
</BookResponse>
```
Методы протокола
----------------
### getFreeSeats
Получение списка свободных мест для рейса между указанными станциями. В параметре принимает ключ рейса, дату и UIDы станции отправления и назначения
**URL: \[BASE\_URL\]/transit/getFreeSeats**
Запрос:
```xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GetFreeSeatsRequest>
<!-- Ключ рейса -->
<RouteKey>
<!-- UID станции отправления рейса -->
<dispatchStationUid>523243243209840293840293849895781093</dispatchStationUid>
<!-- UID конечной станции -->
<arrivalStationUid>90929359890589203498093209904288</arrivalStationUid>
<!-- время отправления со станции отпраления. в часовом поясе станции отправления. -->
<dispatchTime>10:00:00</dispatchTime>
</RouteKey>
<!-- Дата отправления рейса со станции посадки поссажира -->
<date>2017-08-11</date>
<!-- UID станции посадки пассажира -->
<dispatchStationUid>hhwrl23kjhjj434kjljkshakjlk2j3l2</dispatchStationUid>
<!-- UID станции высадки пассажира -->
<arrivalStationUid>34l5klk435l435j34jjjk345jjk344CC</arrivalStationUid>
</GetFreeSeatsRequest>
```
Ответ:
```xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<GetFreeSeatsResponse>
<Body>
<TransitSeat>
<!-- ID места. Обязателен -->
<seatId>26</seatId>
<!-- Номер места места. Обязателен -->
<seatNum>26</seatNum>
</TransitSeat>
<TransitSeat>
<seatId>29</seatId>
<seatNum>29</seatNum>
</TransitSeat>
..............
<TransitSeat>
<seatId>47</seatId>
<seatNum>47</seatNum>
</TransitSeat>
</Body>
</GetFreeSeatsResponse>
```
### book
Бронирование заказа. Бронь должна сохраняться в течение ограниченного времени,
от 20 до 60 минут. Если в указанный период времени не поступает
подтверждение оплаты через метод confirmOrder(), то система реализующая протокол
обязана отменить бронь. Допускается бронирование нескольких билетов в рамках одного
заказа. В параметрах запроса передаются ключ рейса, дата рейса
идентификатор станции отправления, идентификатор станции назначения,
информацию об агенте совершивший эту операцию.
**URL: \[BASE\_URL\]/transit/bookOrder**
Запрос:
```xml
<?xml version="1.0"?>
<TransitBookRequest>
<!-- Ключ рейса -->
<RouteKey>
<!-- UID станции отправления рейса -->
<dispatchStationUid>523243243209840293840293849895781093</dispatchStationUid>
<!-- UID конечной станции -->
<arrivalStationUid>90929359890589203498093209904288</arrivalStationUid>
<!-- время отправления со станции отпраления. в часовом поясе станции отправления. -->
<dispatchTime>10:00:00</dispatchTime>
</RouteKey>
<!-- Дата отправления рейса со станции посадки поссажира -->
<date>2017-08-11</date>
<!-- UID станции посадки пассажира -->
<dispatchStationUid>hhwrl23kjhjj434kjljkshakjlk2j3l2</dispatchStationUid>
<!-- UID станции высадки пассажира -->
<