{ "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~~