{
"id": "ShariXKnowledgeOpenScenarioOrderCreate",
"page": "sharixopen:knowledge:scenarios:order_create",
"area": "open",
"type": "procedure",
"title": "Создание заказа через API: транзакция, ответ и внешние события",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeScenarios",
"ShariXKnowledgeOpenKnowledgeArchitectureApicontracts",
"ShariXKnowledgeOpenKnowledgeDomainOrderticket"
],
"depends_on": [
"ShariXKnowledgeOpenKnowledgeArchitectureApicontracts",
"ShariXKnowledgeOpenKnowledgeDomainOrderticket"
],
"verified_by": [
"ShariXKnowledgeOpenKnowledgeDevelopmentAcceptance"
]
},
"extensions": {
"taxonomy": {
"domain": "use_cases",
"lifecycle": "implemented",
"parents": [
"ShariXKnowledgeScenarios"
],
"terms": [
"audience_developer",
"audience_integrator",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_orders_creation",
"topic_orders_lifecycle",
"topic_api_contracts",
"order",
"ticket"
],
"component": "dbsynce, tickets, webapp-base"
},
"source_evidence": [
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "CODING_POLICY.md",
"sha256": "65136bd597db88bfd4935d18d7eef7c733495169ece42f9de6a53c8008f56e3f"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/repositories.sh",
"sha256": "b763fdd351c71c6c6518253fba871efc7beb6f929badc54d863132fe7acea86e"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/install.sh",
"sha256": "8ac242e26175677742c5c4fdb01780ba8a313e619dd35ea7a03ffc775ffa3b7c"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/utils/install_modes.sh",
"sha256": "e791aa06abfe8ed7ad9264bfeed713f232651bb5ab378d1645cd9db7090eb5a2"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "bin/check_acceptance.sh",
"sha256": "1ae9ac7dbdff2f45b6645ea34d081965d72f4968325c448121f514cf15359610"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "sharix_admin/views/order.py",
"sha256": "fbcea84695251502a6f44e92966d59840db1c43f50a15e33a5adecc5deb420df"
},
{
"repository": "sharix-open-webapp-base",
"commit": "f65376cdb5a3ac68a55d04f4c19493137e5a290b",
"path": "core/urls.py",
"sha256": "5997b9600b4ef8be878201d83923edc961e881cac2c0245c7486f64d4e35e7e1"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "models/orders.py",
"sha256": "4a5dbbec8a62ed3ca933ae5494032ba2a8a4369c7c1ece4011c98755df23faf2"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/open_order_api.py",
"sha256": "8950a4169a352db3d250c9e08f6de7a4fa2a31985a247541411e20bd224ca2b6"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/ticket_gen.py",
"sha256": "7bdf92007916aec7e968a45f142e5f98fffb5dfe9b61ee7fcae3c65c826dfbde"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_actions.py",
"sha256": "27ce243408a46f1b700d94bf78a25c68ef21d51078bb03627174e4a424d82ef0"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_permissions.py",
"sha256": "9c1636daa80c4da68c3ae5cf347e279127d142eeff91e969559e8bd54ca3d81d"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/mobile_order_events.py",
"sha256": "818b21d471b629dcae3d96ee089e0f83406a41d03ad36a6c4ddabdf8857f2e68"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/integration_ports.py",
"sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "apiviews/open_api.py",
"sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "urls.py",
"sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "models/__init__.py",
"sha256": "32072140482e8edc880432e2537f22d9d00537e318f972b709f221250ef931cf"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "models/local_examples.py",
"sha256": "07ac086d9eb18e0a1d473ed316184d1d924858c966d1722654638034a8bdb36c"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "models/webservice_running.py",
"sha256": "799e5bfe8e0313b60ed5fd515fa7d8381ea12fe6e42ad403b7a5b33e315781c6"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "apiviews/orders_local.py",
"sha256": "b27440115f894f66920abded9d2e5bfb94b630bed16a1c201e422cbc689ee54f"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "serializer/orders_local.py",
"sha256": "7eeac936a02718e0be57328c36991b132fab92511e8a5d140dd50ac8042f37df"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "README.md",
"sha256": "2e2f2dc29e03dc33074c9bf674b0ffcc8c2c236d4000dc61127a3dfa4859202b"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "docs/component-library.md",
"sha256": "e477c21db25163637cbdbfd09f600a93528bef04121f9fb2c68fc6eb84d5259f"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "component_library/catalog.json",
"sha256": "9e34b73b6eaec1f572939879c59b0f6bebe0c95ea2d568104287dffff34c36cf"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "forms.py",
"sha256": "ef4984f9f288b1ebaef4b8c9e825b5384ef4b2e6480b3d54ae6beaef0570be8e"
},
{
"repository": "sharix-open-webapp-design-template",
"commit": "8f96190d24c9031125cea5042492be49c4d1bf3a",
"path": "templates/design_template/components/form_field.html",
"sha256": "521f0c9ebbb4f091f45c99b8e1d8ff9841df8cb20434088ae756703937251631"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "models/ticket.py",
"sha256": "4768d9ef47b61bf3ae98bf2749ed142adc477978b44de29177363ba9664baa43"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "signals.py",
"sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_blockly_codegen.py",
"sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "tools/check_canonical_ticket_codegen.py",
"sha256": "6df939d8d1fa9c2a54a124773d652b46a0e8545159d19da66879a4194a616757"
}
],
"reviewed_on": "2026-10-29",
"diagram": {
"format": "bpmn",
"executable": false
},
"editorial_review": {
"date": "2026-10-31",
"scope": "rewrite",
"batch": 3,
"public_boundary": "Открытый код ShariX Open; детали закрытых компонентов и внутренние операции Platform — intrawiki."
},
"source_review_20261031": {
"kind": "source_analysis_not_runtime_acceptance",
"sources": [
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/open_order_api.py",
"sha256": "8950a4169a352db3d250c9e08f6de7a4fa2a31985a247541411e20bd224ca2b6"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/integration_ports.py",
"sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/ticket_gen.py",
"sha256": "7bdf92007916aec7e968a45f142e5f98fffb5dfe9b61ee7fcae3c65c826dfbde"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/mobile_order_events.py",
"sha256": "818b21d471b629dcae3d96ee089e0f83406a41d03ad36a6c4ddabdf8857f2e68"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "apiviews/open_api.py",
"sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "urls.py",
"sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "signals.py",
"sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"
},
{
"repository": "sharix-open-webapp-base",
"commit": "3e05f96d8fbae165c7b7f91d58048ff81c866be4",
"path": "core/urls.py",
"sha256": "5997b9600b4ef8be878201d83923edc961e881cac2c0245c7486f64d4e35e7e1"
},
{
"repository": "sharix-open-webapp-base",
"commit": "3e05f96d8fbae165c7b7f91d58048ff81c866be4",
"path": "sharix_admin/views/order.py",
"sha256": "fbcea84695251502a6f44e92966d59840db1c43f50a15e33a5adecc5deb420df"
}
]
},
"list_format_review": {
"date": "2026-10-31",
"scope": "Перечисления полей, результатов и проверок оформлены списками; исходники, команды, таблицы, схемы и лицензионные границы сохранены."
},
"classification": {
"schema": "sharix.knowledge.classification.v1",
"products": [
"sharix_open"
],
"audiences": [
"developer",
"integrator",
"reviewer",
"ai"
],
"material": "scenario",
"topics": [
"orders/creation",
"orders/lifecycle",
"api/contracts"
],
"tag_terms": [
"audience_developer",
"audience_integrator",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_orders_creation",
"topic_orders_lifecycle",
"topic_api_contracts",
"order",
"ticket"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "lifecycle относится к описываемому коду, а status к редакции документа; implemented не означает успешный runtime тест"
},
"classification_review": {
"date": "2026-10-31",
"source": "Содержание текущей страницы и проверенный словарь классификации",
"body_scope": "classification_and_navigation_only"
}
},
"content_sha256": "d2e3d6cdb8c4b1d761756ae13e67c51bbb8c0556241ca1fd91293abb7df6deb4",
"schema": 1
}
====== Создание заказа через API: транзакция, ответ и внешние события ======
~~NOCACHE~~
**Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]].
**Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#integrator|Интегратор]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#sozdanie_i_chernovik|Заказы → Создание и черновик]] · [[sharixopen:knowledge:classification:topics#zhiznennyj_cikl|Заказы → Жизненный цикл]] · [[sharixopen:knowledge:classification:topics#kontrakty|API → Контракты]].
Сценарий описывает POST /dbsynce/api/v1/orders/ в ShariX Open: от получения запроса до сохранённого заказа, HTTP-ответа и событий после commit. Это описание проверенного исходного кода, а не отчёт о выполнении запроса на рабочем сервере.
===== Где находится операция =====
Корневой core/urls.py подключает dbsynce.urls по префиксу dbsynce/. При включённом DBSYNCE_OPEN_API_ENABLED регистрируются маршруты apiviews/open_api.py. POST принимает OpenOrderListCreateAPIView, создание выполняет lib/open_order_api.py:create_order_from_payload.
OpenAPIBaseView использует IsAuthenticated | HasAPIKey. Но предметная операция получает request.user и проверяет участников и доступные объекты. Пропуск по API key не означает, что вместо actor можно передать произвольного пользователя или создать заказ от любой организации. Для интеграции сначала определяют поддержанный контекст пользователя и предметные права.
Для проверки нужен предназначенный тестовый контекст: доступный тариф, компания/предложение, пользователь с подходящим основанием и допустимые данные получателя. Не подбирать чужие ID ради прохождения валидации.
===== Что выбрать до отправки =====
^ Условие ^ Поведение текущей операции ^
| creation_mode=draft | Создать черновик с начальным Ticket TEMPLATE. |
| creation_mode=place | Разместить заказ с начальным Ticket BOOKED; затем возможно действие назначения. |
| Режим отсутствует | normalize_order_creation_mode выбирает place. Не считать отсутствующее поле командой сохранения черновика. |
| Категория subscription | Операция принудительно выбирает place. |
| self_order=true | Проверяются доступность self-order и предложение исполнителя текущего пользователя. Одновременный корпоративный заказ отклоняется. |
Получатель услуги может отличаться от создателя. Операция отдельно получает receiver и его снимок receiver_name/receiver_phone. Состав обязательных полей зависит от выбранного предложения и его правил; произвольный универсальный payload не заменяет доступные клиенту options.
===== Сохранение в одной транзакции =====
- Нормализуются режим и self-order, выбираются доступные связанные объекты. Проверяются корпоративный контекст, получатель, время, длительность, количество и маршрут.
- Создаётся Orders. pk назначает БД; приложение не вычисляет его как максимальный ID плюс один.
- create_ticket_order создаёт SERVICE_REQUEST Ticket. Заказ сохраняет ссылку ticket_status и связанные вычисленные значения.
- Вызывается initialize_order_execution через backend-порт. Если runtime или политика не настроены, этапов может не быть; вызов сам по себе не доказывает создания плана.
- Если режим place и указан provider, выполняется ACTION_ASSIGN_CREATED. Неуспешный результат добавляется в warnings. Созданный заказ при этом может остаться сохранённым.
- Планируется мобильное событие order.created или order.placed. Сетевые callbacks, запланированные через on_commit, относятся к следующей границе.
create_order_from_payload помечена transaction.atomic. Исключение внутри неё до commit отменяет её записи. Неуспешный результат назначения, обработанный как warning, не равен такому исключению.
===== BPMN: границы транзакции и ответа =====
Описательная схема isExecutable=false. Она показывает проверенный API-путь и отдельно события после commit. Схема не исполняет заказ и не заменяет Blockly последующих обработчиков.
{"notes": ["Схема свёрнута до границ HTTP/транзакции/событий. Ветви draft/place, subscription и назначения описаны рядом. Callback не гарантирует доставку. Аутентификация APIView предшествует операции; ошибка до commit откатывает её записи."], "sources": [{"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "models/orders.py", "repository": "sharix-open-backend", "sha256": "4a5dbbec8a62ed3ca933ae5494032ba2a8a4369c7c1ece4011c98755df23faf2"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/open_order_api.py", "repository": "sharix-open-backend", "sha256": "8950a4169a352db3d250c9e08f6de7a4fa2a31985a247541411e20bd224ca2b6"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/ticket_gen.py", "repository": "sharix-open-backend", "sha256": "7bdf92007916aec7e968a45f142e5f98fffb5dfe9b61ee7fcae3c65c826dfbde"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_actions.py", "repository": "sharix-open-backend", "sha256": "27ce243408a46f1b700d94bf78a25c68ef21d51078bb03627174e4a424d82ef0"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_permissions.py", "repository": "sharix-open-backend", "sha256": "9c1636daa80c4da68c3ae5cf347e279127d142eeff91e969559e8bd54ca3d81d"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/mobile_order_events.py", "repository": "sharix-open-backend", "sha256": "818b21d471b629dcae3d96ee089e0f83406a41d03ad36a6c4ddabdf8857f2e68"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}]}
backend_start
backend_create
backend_commit
backend_callbacks
backend_response
backend_error
backend_classify
backend_known
backend_other
backend_Flow_0
backend_Flow_0
backend_Flow_1
backend_Flow_1
backend_Flow_2
backend_Flow_2
backend_Flow_3
backend_Flow_3
backend_Flow_4
backend_Flow_4
backend_Flow_5
backend_Flow_6
backend_Flow_5
backend_Flow_6
===== Что означает ответ =====
После возврата из операции view получает snapshot по созданному order.pk и формирует ответ:
* HTTP-код ''201'';
* поле ''success'';
* поле ''message'';
* поле ''warnings'';
* поле ''order''.
Нужно сохранить ID возвращённого заказа и прочитать warnings: success=true означает успех создания, а не безусловный успех назначения и всех внешних доставок.
**Пример трактовки:** если заказ создан, но предложение исполнителя не удалось назначить, клиент показывает созданный заказ и причину из warnings. Он не должен отправлять ещё один POST только ради повторной попытки назначения: это уже другое действие над существующим заказом.
Получение snapshot и сериализация ответа выполняются после возврата из функции создания. Поэтому ошибка подготовки HTTP-ответа также не доказывает, что заказ не был сохранён. Эту границу учитывают при восстановлении после таймаута/ошибки.
===== События после commit =====
Ticket-сигналы планируют ticket.changed; при каноническом переходе предыдущему обработчику также передаётся ticket.moved. Обработчик получает сигнал и сверяет сохранённое состояние. schedule_order_mobile_event предпринимает доставку мобильного события после commit.
Атомарность БД не гарантирует однократную доставку сети. Если данные уже committed, транспортная ошибка не откатывает их автоматически. Отдельно подтверждают:
* создание заказа;
* доставку XMPP;
* получение уведомления мобильным клиентом.
Это три отдельных свидетельства.
===== Отказы и неизвестный результат =====
^ Ситуация ^ Что зафиксировано в коде / что делать ^
| PermissionDenied из создания | View возвращает 403 с success=false и message. |
| Django ValidationError из создания | View возвращает 400 с success=false и errors. |
| Неизвестный creation_mode | Нормализация бросает ValueError; эта view явно его не перехватывает. Нельзя обещать готовый ответ 400 — это известное ограничение. |
| Таймаут, обрыв или ошибка после сохранения | Сначала установить, создан ли заказ. Повтор POST может создать ещё один. |
В изученном клиентском POST не найден отдельный контракт idempotency key. Сначала проверить доступный пользователю список/историю и контекст операции; если исход нельзя установить однозначно — передать его на разбор. Последний ID в общей таблице не является доказательством результата именно этого запроса.
===== HTML-форма проверяется отдельно =====
sharix_admin.views.order.OrderCreateView.form_valid собирает заказ через OrderForm и собственный atomic-блок. Она использует общие ticket/action/execution primitives, но не вызывает целиком create_order_from_payload; у неё есть дополнительные шаги подписки и расширений.
Форма отдельно перехватывает неизвестный способ сохранения и возвращает ошибку формы. Это не исправляет API-ветку ValueError. При изменении общего правила нужно проверить оба входа, а не считать успешный API доказательством правильности формы.
===== Как принять изменение этой операции =====
На предназначенной установке проверить:
* режимы draft и place;
* сохранённые Orders и Ticket;
* доступность заказа создавшему пользователю;
* отказ для недоступных объектов или организации;
* self-order;
* предупреждение при отказе назначения;
* отсутствие частичных записей при исключении до commit;
* доставку события после commit;
* неизвестный mode;
* затронутый HTML-путь.
Не повторять создание на рабочих данных для проверки потери ответа. Такой случай воспроизводят в изолированном тестовом контексте. Общие критерии — [[sharixopen:knowledge:development:acceptance|приёмка изменений]], структура данных — [[sharixopen:knowledge:domain:order_ticket|заказ и Ticket]], локальное API-расхождение — [[sharixopen:knowledge:modules:webservice_running|Webservice Running]].
Сценарий касается открытого API ShariX Open. Внутренние операции Platform и закрытых компонентов описываются в intrawiki; проверку shared-изменения другим продуктом передают его ответственному.
===== Исходники, сверенные 31.10.2026 =====
Проверены опубликованные исходники указанных commits. Это анализ кода, а не подтверждение версии, данных или выполненного запроса на сервере.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/open_order_api.py|sharix-open-backend: lib/open_order_api.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/integration_ports.py|sharix-open-backend: lib/integration_ports.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/ticket_gen.py|sharix-open-backend: lib/ticket_gen.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/mobile_order_events.py|sharix-open-backend: lib/mobile_order_events.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/apiviews/open_api.py|sharix-open-backend: apiviews/open_api.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/urls.py|sharix-open-backend: urls.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/signals.py|sharix-open-tickets: signals.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/3e05f96d8fbae165c7b7f91d58048ff81c866be4/core/urls.py|sharix-open-webapp-base: core/urls.py]].
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webapp-base/src/commit/3e05f96d8fbae165c7b7f91d58048ff81c866be4/sharix_admin/views/order.py|sharix-open-webapp-base: sharix_admin/views/order.py]].
~~SHARIX_KNOWLEDGE_RELATED~~