{
"id": "ShariXKnowledgeServiceRequestProcessBPMN",
"page": "sharixopen:knowledge:scenarios:service_request_process",
"area": "open",
"type": "procedure",
"title": "SERVICE_REQUEST в PROCESS: этапы выполнения, завершение и подписка",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeServiceRequestPrestartBPMN",
"ShariXKnowledgeServiceRequestTemplateBPMN",
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeScenarios",
"ShariXKnowledgeOpenKnowledgeModulesWebservicerunning"
],
"depends_on": [
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeOpenKnowledgeModulesBackenddbsynce"
],
"verified_by": [
"ShariXKnowledgeVerification"
]
},
"extensions": {
"taxonomy": {
"domain": "business_processes",
"lifecycle": "implemented",
"component": "handlers_examples, handlers_backend, dbsynce, webservice_running",
"parents": [
"ShariXKnowledgeScenarios"
],
"terms": [
"audience_developer",
"audience_integrator",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_orders_execution",
"topic_orders_lifecycle",
"topic_orders_payments",
"service_request",
"ticket_process",
"order_round",
"payment_state",
"completion_gate",
"blocking_stage",
"subscription_access_order",
"bpmn",
"order",
"ticket",
"blockly",
"generated_python"
]
},
"diagram": {
"format": "bpmn",
"executable": false
},
"source_evidence": [
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "handlers/open_service_request_process.py",
"sha256": "f9d07ac1e8bad0c5a8dd55d81110777951e40a9a5fd370b7652386c016a6c1ce"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "generated_handler_blocks/open_service_request_process.json",
"sha256": "1e6a24a5819d9ab3cc033516c134d97423def1ee8944352d8bea7dd8c966f99a"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "catalog.py",
"sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/blockly_runtime.py",
"sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/requesters.py",
"sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/order_action_messages.py",
"sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_blockly_codegen.py",
"sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "ticket_codegen_contract.json",
"sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "lib/tickets.py",
"sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/handler_auth.py",
"sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "signals.py",
"sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "services/handler_wakeup.py",
"sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "apiviews/handler_order_workflow.py",
"sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "apiviews/open_api.py",
"sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_handler_relay.py",
"sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/handler_order_context.py",
"sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_workflow_policy.py",
"sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"
},
{
"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": "urls.py",
"sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_lifecycle.py",
"sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_provider_requirements.py",
"sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/order_rounds.py",
"sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "settings_schema.py",
"sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/integration_ports.py",
"sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/subscription_order_lifecycle.py",
"sha256": "c50ba934aa44e90125564caff8461788d8454747fe6b0196765c449ff48cd70f"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/payments/facade.py",
"sha256": "57d0d71939f5bcd391090ca473008f2283e8d7fdb369486ff044e1fcf9cd3876"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_execution_location.py",
"sha256": "2fc1ad5f63e5b81a245d493c70d3de8e33c194cd3eb2316efde667b06e651ddc"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/order_pricing.py",
"sha256": "c69ad3e6b34dc6b9b1aa3b554a9634a49a9ce7ecbb8bd6216e46832857995893"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "apps.py",
"sha256": "dde02f8eae3449c973b6c0ef66053daa7563116149ccd4da00511fdad50c8e46"
},
{
"repository": "sharix-open-webservice-running",
"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019",
"path": "services/order_execution.py",
"sha256": "748e6bc20a784347afa9396283e3086a03ccfde30bed86849d934f9588101a91"
},
{
"repository": "sharix-open-backend",
"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093",
"path": "lib/service_pricing_policy.py",
"sha256": "d8dbaecea24161c385b40d32a7e8657f7a7ba8affc3cc22a89ce835c25a21aa6"
}
],
"handler_process": {
"handler_id": "open_service_request_process",
"source_kind": "git_builtin",
"canonical_python_verified": true,
"reviewed_on": "2026-10-29",
"generator": "tools/generate_handler_bpmn.py",
"generator_sha256": "488101a6be2f8f43d63ce966760be9f1c3664c88d88bed17ce0d6bfee9563cae",
"models": {
"logic": "9d3d521f6f0f52e559391220b9fa1b24da24f34579fc1dcc89fd4ec553a3a688",
"round": "0706ef764c72309916f7d6150021d015b14cafa6f0ddd8cb6ae2f8ab7438f7d9",
"gate": "b9c3a9a15d7510f7a1d03b563a6fafe4fed8c9123f4c3d996a5497dab0266d46",
"subscription": "2d5f834c1792223326e3d800e76e96f6725830bb321100fe878bc6eb102b75e1"
},
"known_contract_gaps": [
"Active finish-only round captures trusted web force_majeure and may reject action_mismatch instead of immediate queue."
]
},
"classification": {
"schema": "sharix.knowledge.classification.v1",
"products": [
"sharix_open"
],
"audiences": [
"developer",
"integrator",
"support",
"reviewer",
"ai"
],
"material": "scenario",
"topics": [
"orders/execution",
"orders/lifecycle",
"orders/payments"
],
"tag_terms": [
"audience_developer",
"audience_integrator",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_orders_execution",
"topic_orders_lifecycle",
"topic_orders_payments",
"service_request",
"ticket_process",
"order_round",
"payment_state",
"completion_gate",
"blocking_stage",
"subscription_access_order",
"bpmn",
"order",
"ticket",
"blockly",
"generated_python"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "implemented — описана проверенная реализация исходников; серверный runtime отдельно; review — состояние текста"
},
"editorial_review": {
"date": "2026-10-31",
"scope": "Конкретизация действий, условий, результатов и диагностики; перечисления; исходные BPMN сохранены",
"current_source_records_verified": 32,
"original_source_evidence_recheck": "После git fetch все исходные commits/SHA-256 совпали; дополнительные функциональные источники включены в source_evidence",
"canonical_regeneration": {
"kind": "ticket",
"compared_python_paths": [
"handlers/open_service_request_process.py",
"generated_handlers/open_service_request_process.py"
],
"generator_sources_verified": 11,
"handler_executed": false
},
"runtime_checked": false
}
},
"content_sha256": "bb247be14870f7ee5d92636e6256e9c6bfd5afa6dc20c88784eaf7a7ce49f8e8",
"schema": 1
}
====== SERVICE_REQUEST в PROCESS: этапы выполнения, завершение и подписка ======
~~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#podderzhka|Поддержка]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#ispolnenie|Заказы → Исполнение]] · [[sharixopen:knowledge:classification:topics#zhiznennyj_cikl|Заказы → Жизненный цикл]] · [[sharixopen:knowledge:classification:topics#finalizacija_oplaty|Заказы → Финализация оплаты]].
**Область:** ShariX Open. **Обработчик:** ''open_service_request_process'', тип ''SERVICE_REQUEST'' (2), статус ''PROCESS''. 31.10.2026 исходники повторно получены из Git. Обе Python-копии совпали с новой канонической генерацией Blockly; проверены 11 исходников генераторов. Сам обработчик и его внешние действия не запускались. Выбранная версия и работающая установка проверяются отдельно.
===== Назначение и границы =====
Порядок обработки выполняемого заказа:
- Проверить истечение системного заказа доступа подписки.
- Обработать одно подходящее queued пользовательское намерение.
- Загрузить context и проверить внешний completion gate этапов.
- При допуске проверить planned_finish и выполнить автоматическое завершение либо раунд finish.
Обычная работа, подписка, блокирующий этап, платёжная финализация и CLOSED — разные части процесса.
BPMN описательные, ''isExecutable=false''. Blockly фиксирует порядок вызовов и решений; исполняется сгенерированный Python. Модели Stage и их пользовательские действия принадлежат ''webservice_running'', Orders и канонические переходы — ''dbsynce''. Нейтральный integration port связывает их, не превращая Blockly в исполнитель внешних этапов.
===== Порядок одного прохода (BPMN) =====
{"notes": ["Описательная BPMN, isExecutable=false; исполняется канонический Python из Blockly.", "Сначала истечение подписки, затем queued intent, затем context и gate этапов.", "Обычный DONE ещё не означает CLOSED/оплату.", "PROCESS round без expires_at; интервал повторной отправки — не TTL ответа."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_process.py", "repository": "sharix-open-handlers-examples", "sha256": "f9d07ac1e8bad0c5a8dd55d81110777951e40a9a5fd370b7652386c016a6c1ce"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_process.json", "repository": "sharix-open-handlers-examples", "sha256": "1e6a24a5819d9ab3cc033516c134d97423def1ee8944352d8bea7dd8c966f99a"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"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": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/subscription_order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "c50ba934aa44e90125564caff8461788d8454747fe6b0196765c449ff48cd70f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/payments/facade.py", "repository": "sharix-open-backend", "sha256": "57d0d71939f5bcd391090ca473008f2283e8d7fdb369486ff044e1fcf9cd3876"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_execution_location.py", "repository": "sharix-open-backend", "sha256": "2fc1ad5f63e5b81a245d493c70d3de8e33c194cd3eb2316efde667b06e651ddc"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_pricing.py", "repository": "sharix-open-backend", "sha256": "c69ad3e6b34dc6b9b1aa3b554a9634a49a9ce7ecbb8bd6216e46832857995893"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "apps.py", "repository": "sharix-open-webservice-running", "sha256": "dde02f8eae3449c973b6c0ef66053daa7563116149ccd4da00511fdad50c8e46"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "services/order_execution.py", "repository": "sharix-open-webservice-running", "sha256": "748e6bc20a784347afa9396283e3086a03ccfde30bed86849d934f9588101a91"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/service_pricing_policy.py", "repository": "sharix-open-backend", "sha256": "d8dbaecea24161c385b40d32a7e8657f7a7ba8affc3cc22a89ce835c25a21aa6"}]}
process_start
process_expire
process_expired
process_subscription_end
process_intent
process_intent_ok
process_intent_end
process_context
process_gate
process_blocked
process_due
process_early
process_auto
process_planned
process_round
process_result
process_actual
process_wait
process_done
process_Flow_0
process_Flow_0
process_Flow_1
process_Flow_1
process_Flow_2
process_Flow_3
process_Flow_2
process_Flow_3
process_Flow_4
process_Flow_4
process_Flow_5
process_Flow_6
process_Flow_5
process_Flow_6
process_Flow_7
process_Flow_7
process_Flow_8
process_Flow_9
process_Flow_8
process_Flow_9
process_Flow_10
process_Flow_11
process_Flow_10
process_Flow_11
process_Flow_12
process_Flow_14
process_Flow_12
process_Flow_13
process_Flow_14
process_Flow_15
process_Flow_15
process_Flow_16
process_Flow_18
process_Flow_16
process_Flow_17
process_Flow_18
process_Flow_13
process_Flow_17
При своём статусе handler сначала вызывает ''expire-subscription''. Только ''details.expired=true'' завершает этот проход как истёкшую подписку; обычный success с expired=false не означает завершение заказа.
Далее обрабатывается один подходящий queued intent finish/force_majeure/decline/refuse. Успех/stale освобождает текущую очередь. Обработанный неуспех позволяет продолжить; исключение прерывает проход. Потом загружается order context и читается backend completion gate.
* Gate запрещает → локальная причина ''execution_stages'', PROCESS_RECHECK.
* Gate разрешает → причина ''provider_finish'', проверка ''planned_finish''.
* До планового окончания или при отсутствующей/некорректной дате → RECHECK.
* После даты при AUTO_DONE=true → narrow finish с time_mode=planned. Неуспех остаётся на RECHECK.
* При AUTO_DONE=false → раунд подтверждения finish, narrow finish с actual time при winner.
В ручном пути winner/no_winner проверяются до отправки и после неё. no_winner забывается; исчерпанный раунд тоже сбрасывается, после чего используется RECHECK. Доменный неуспех finish увеличивает отдельный action counter; при достижении порога забывается раунд. Это не автоматический DECLINED или FORCEMAJEUER. Иной результат отправки/раунда ждёт NOTIFICATION_INTERVAL.
===== Внешние этапы и повторный backend gate (BPMN) =====
{"notes": ["Описательная BPMN, isExecutable=false; исполняется канонический Python из Blockly.", "Сначала истечение подписки, затем queued intent, затем context и gate этапов.", "Обычный DONE ещё не означает CLOSED/оплату.", "PROCESS round без expires_at; интервал повторной отправки — не TTL ответа.", "Stage models принадлежат webservice_running; backend обращается через нейтральный порт.", "Gate повторяется внутри канонического finish, не только до приглашения."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_process.py", "repository": "sharix-open-handlers-examples", "sha256": "f9d07ac1e8bad0c5a8dd55d81110777951e40a9a5fd370b7652386c016a6c1ce"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_process.json", "repository": "sharix-open-handlers-examples", "sha256": "1e6a24a5819d9ab3cc033516c134d97423def1ee8944352d8bea7dd8c966f99a"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"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": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/subscription_order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "c50ba934aa44e90125564caff8461788d8454747fe6b0196765c449ff48cd70f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/payments/facade.py", "repository": "sharix-open-backend", "sha256": "57d0d71939f5bcd391090ca473008f2283e8d7fdb369486ff044e1fcf9cd3876"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_execution_location.py", "repository": "sharix-open-backend", "sha256": "2fc1ad5f63e5b81a245d493c70d3de8e33c194cd3eb2316efde667b06e651ddc"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_pricing.py", "repository": "sharix-open-backend", "sha256": "c69ad3e6b34dc6b9b1aa3b554a9634a49a9ce7ecbb8bd6216e46832857995893"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "apps.py", "repository": "sharix-open-webservice-running", "sha256": "dde02f8eae3449c973b6c0ef66053daa7563116149ccd4da00511fdad50c8e46"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "services/order_execution.py", "repository": "sharix-open-webservice-running", "sha256": "748e6bc20a784347afa9396283e3086a03ccfde30bed86849d934f9588101a91"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/service_pricing_policy.py", "repository": "sharix-open-backend", "sha256": "d8dbaecea24161c385b40d32a7e8657f7a7ba8affc3cc22a89ce835c25a21aa6"}]}
runtime_start
runtime_gate
runtime_allowed
runtime_wait
runtime_timer
runtime_finish
runtime_result
runtime_Flow_0
runtime_Flow_0
runtime_Flow_4
runtime_Flow_1
runtime_Flow_1
runtime_Flow_2
runtime_Flow_5
runtime_Flow_2
runtime_Flow_3
runtime_Flow_3
runtime_Flow_4
process_recheck_interval
runtime_Flow_5
runtime_Flow_6
runtime_Flow_6
{"notes": ["Описательная BPMN, isExecutable=false; исполняется канонический Python из Blockly.", "Сначала истечение подписки, затем queued intent, затем context и gate этапов.", "Обычный DONE ещё не означает CLOSED/оплату.", "PROCESS round без expires_at; интервал повторной отправки — не TTL ответа.", "Stage models принадлежат webservice_running; backend обращается через нейтральный порт.", "Gate повторяется внутри канонического finish, не только до приглашения."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_process.py", "repository": "sharix-open-handlers-examples", "sha256": "f9d07ac1e8bad0c5a8dd55d81110777951e40a9a5fd370b7652386c016a6c1ce"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_process.json", "repository": "sharix-open-handlers-examples", "sha256": "1e6a24a5819d9ab3cc033516c134d97423def1ee8944352d8bea7dd8c966f99a"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"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": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/subscription_order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "c50ba934aa44e90125564caff8461788d8454747fe6b0196765c449ff48cd70f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/payments/facade.py", "repository": "sharix-open-backend", "sha256": "57d0d71939f5bcd391090ca473008f2283e8d7fdb369486ff044e1fcf9cd3876"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_execution_location.py", "repository": "sharix-open-backend", "sha256": "2fc1ad5f63e5b81a245d493c70d3de8e33c194cd3eb2316efde667b06e651ddc"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_pricing.py", "repository": "sharix-open-backend", "sha256": "c69ad3e6b34dc6b9b1aa3b554a9634a49a9ce7ecbb8bd6216e46832857995893"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "apps.py", "repository": "sharix-open-webservice-running", "sha256": "dde02f8eae3449c973b6c0ef66053daa7563116149ccd4da00511fdad50c8e46"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "services/order_execution.py", "repository": "sharix-open-webservice-running", "sha256": "748e6bc20a784347afa9396283e3086a03ccfde30bed86849d934f9588101a91"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/service_pricing_policy.py", "repository": "sharix-open-backend", "sha256": "d8dbaecea24161c385b40d32a7e8657f7a7ba8affc3cc22a89ce835c25a21aa6"}]}
stages_start
stages_checklist
stages_complete
stages_save
stages_Flow_0
stages_Flow_0
stages_Flow_1
stages_Flow_1
stages_Flow_2
stages_Flow_2
Проверка order.execution.completion_gate читает нейтральный порт. Адаптер webservice_running регистрируется в Apps.ready и ищет Stage:
* этого заказа;
* с blocks_order_completion=true;
* со status=PENDING.
Проверяются также записи вне обычного workspace. Backend и handler получают blocking_stages и причину запрета.
Уполномоченный участник выполняет работу и отмечает checklist/этап через модуль исполнения. ''complete_stage'' проверяет видимость, policy права завершать и отсутствие незавершённых обязательных checklist items; только потом сохраняет Stage COMPLETED. Handler сам не отмечает эти этапы выполненными. Снятие блокировки тоже отдельное разрешённое действие policy, не способ для handler обойти невыполненную работу.
Очередной проход перечитывает gate. Даже если до приглашения он разрешал завершение, **канонический finish повторно проверяет gate под lock**: промежуточный снимок не даёт права закрыть вновь заблокированный заказ.
Публичный порт возвращает default allowed=true, если:
* runtime adapter не зарегистрирован;
* у adapter нет вызываемого completion_gate;
* метод вернул None;
* результат имеет неподходящий тип.
Исключение вызванного метода само по себе не становится разрешением. Поэтому allowed=true без проверки регистрации не доказывает, что реальные Stage проверены.
===== Исполнитель, finish и интервал повторов (BPMN) =====
{"notes": ["Описательная BPMN, isExecutable=false; исполняется канонический Python из Blockly.", "Сначала истечение подписки, затем queued intent, затем context и gate этапов.", "Обычный DONE ещё не означает CLOSED/оплату.", "PROCESS round без expires_at; интервал повторной отправки — не TTL ответа."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_process.py", "repository": "sharix-open-handlers-examples", "sha256": "f9d07ac1e8bad0c5a8dd55d81110777951e40a9a5fd370b7652386c016a6c1ce"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_process.json", "repository": "sharix-open-handlers-examples", "sha256": "1e6a24a5819d9ab3cc033516c134d97423def1ee8944352d8bea7dd8c966f99a"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"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": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/subscription_order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "c50ba934aa44e90125564caff8461788d8454747fe6b0196765c449ff48cd70f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/payments/facade.py", "repository": "sharix-open-backend", "sha256": "57d0d71939f5bcd391090ca473008f2283e8d7fdb369486ff044e1fcf9cd3876"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_execution_location.py", "repository": "sharix-open-backend", "sha256": "2fc1ad5f63e5b81a245d493c70d3de8e33c194cd3eb2316efde667b06e651ddc"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_pricing.py", "repository": "sharix-open-backend", "sha256": "c69ad3e6b34dc6b9b1aa3b554a9634a49a9ce7ecbb8bd6216e46832857995893"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "apps.py", "repository": "sharix-open-webservice-running", "sha256": "dde02f8eae3449c973b6c0ef66053daa7563116149ccd4da00511fdad50c8e46"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "services/order_execution.py", "repository": "sharix-open-webservice-running", "sha256": "748e6bc20a784347afa9396283e3086a03ccfde30bed86849d934f9588101a91"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/service_pricing_policy.py", "repository": "sharix-open-backend", "sha256": "d8dbaecea24161c385b40d32a7e8657f7a7ba8affc3cc22a89ce835c25a21aa6"}]}
round_start
round_create
round_send
round_wait
round_reply
round_validate
round_end
round_timer
round_retry
round_Flow_0
round_Flow_0
round_Flow_1
round_Flow_1
round_Flow_2
round_Flow_2
round_Flow_3
round_Flow_6
round_Flow_3
round_Flow_4
round_Flow_4
round_Flow_5
round_Flow_5
round_Flow_6
round_Flow_7
process_notification_interval
round_Flow_7
{"notes": ["Описательная BPMN, isExecutable=false; исполняется канонический Python из Blockly.", "Сначала истечение подписки, затем queued intent, затем context и gate этапов.", "Обычный DONE ещё не означает CLOSED/оплату.", "PROCESS round без expires_at; интервал повторной отправки — не TTL ответа."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_process.py", "repository": "sharix-open-handlers-examples", "sha256": "f9d07ac1e8bad0c5a8dd55d81110777951e40a9a5fd370b7652386c016a6c1ce"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_process.json", "repository": "sharix-open-handlers-examples", "sha256": "1e6a24a5819d9ab3cc033516c134d97423def1ee8944352d8bea7dd8c966f99a"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"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": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/subscription_order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "c50ba934aa44e90125564caff8461788d8454747fe6b0196765c449ff48cd70f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/payments/facade.py", "repository": "sharix-open-backend", "sha256": "57d0d71939f5bcd391090ca473008f2283e8d7fdb369486ff044e1fcf9cd3876"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_execution_location.py", "repository": "sharix-open-backend", "sha256": "2fc1ad5f63e5b81a245d493c70d3de8e33c194cd3eb2316efde667b06e651ddc"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_pricing.py", "repository": "sharix-open-backend", "sha256": "c69ad3e6b34dc6b9b1aa3b554a9634a49a9ce7ecbb8bd6216e46832857995893"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "apps.py", "repository": "sharix-open-webservice-running", "sha256": "dde02f8eae3449c973b6c0ef66053daa7563116149ccd4da00511fdad50c8e46"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "services/order_execution.py", "repository": "sharix-open-webservice-running", "sha256": "748e6bc20a784347afa9396283e3086a03ccfde30bed86849d934f9588101a91"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/service_pricing_policy.py", "repository": "sharix-open-backend", "sha256": "d8dbaecea24161c385b40d32a7e8657f7a7ba8affc3cc22a89ce835c25a21aa6"}]}
person_notice
person_action
person_send
person_end
person_Flow_0
person_Flow_0
person_Flow_1
person_Flow_1
person_Flow_2
person_Flow_2
Приглашение order.action.required адресуется текущему provider и содержит:
* finish без альтернативного действия;
* popup_policy=active_order;
* due_at=planned_finish.
Expires_at для PROCESS-раунда не устанавливается. Плановая дата не является TTL ответа.
Используются ''SERVICE_REQUEST_PROCESS_ROUND_STRATEGY'', ''...DELIVERY_POLICY'', ''...NOTIFICATION_ATTEMPTS'' (минимум 1) и ''...NOTIFICATION_INTERVAL_SECONDS''. Таймер BPMN обозначает следующий проход/отправку. Достигнутый лимит активного раунда приводит к reset и повтору, не к безусловному завершению заказа без исполнителя. Попытка учитывается до I/O; send failure не равен человеческому отказу.
Ответ валидируется по round/order/ticket/status, участнику/JID, действию, offer при наличии и повтору. Прямой actor определяется отправителем XMPP; web actor допускается только через доверенный relay. Квитанция ответа/HTTP 202 relay не равна DONE. Состояние раундов, intent queue и счётчики — память процесса, не постоянный журнал exactly-once.
==== Маршрутизация web intent зависит от активного раунда ====
При существующем раунде trusted web intent сначала направляется туда. Для активного finish-only раунда ''force_majeure'' может получить ''action_mismatch'' и не попасть в immediate queue. Без раунда queued problem intent может вызвать ''move-active-to-pre-forcemajeur''. Это то же исходное ограничение маршрутизации, что у [[sharixopen:knowledge:scenarios:service_request_prestart|PRE_START]], а не гарантированный рабочий обход при любом состоянии.
Web finish без раунда идёт через immediate ''apply-user-intent'' раньше плановой даты; backend заново проверяет active actor/JID, текущего исполнителя и PROCESS, а пользовательский lifecycle повторяет completion gate. С активным раундом finish становится ответом, затем обычная ветка handler снова проверяет gate и время. Наличие кнопки и подтверждённая передача intent ещё не определяют, какой путь был пройден.
===== Что сохраняет обычный finish =====
Narrow ''finish-process'' требует ''order.finish_process'', текущий scope, PROCESS и provider. Под lock он повторяет completion gate, разрешает time_mode planned/actual и делает канонический DONE. Planned берёт первое доступное ''time_finish_predicted'', затем ''time_finish_placed''; actual — backend now. Сам action не проверяет, наступила ли плановая дата: её проверяет Python.
После успешного finish:
* пустое time_finish_real заполняется effective time;
* пустая location_finish_real заполняется через location resolver;
* существующие фактические значения сохраняются;
* рассчитывается real_price.
Actual wrapper может передать допустимые location-поля победителя, planned wrapper их не передаёт. Текущий wrapper не отправляет expected_provider_id, хотя backend поддерживает проверку этого параметра.
После успешного DONE вызывается ''handle_after_order_done'' выбранного платёжного backend и предпринимается создание следующего повторного заказа. Платёжный hook может добавить сообщение «требуется внимание» без отмены success самого finish. Ошибка создания повторного заказа логируется и добавляет предупреждение, не объявляет предыдущую работу незавершённой. Неожиданное исключение и обработанный доменный результат различаются; после сетевой неопределённости сначала перечитывают фактический статус.
**DONE не означает CLOSED, успешный платёж или гарантированно созданный повтор.** Дальнейшая финализация относится к DONE handler.
===== Отдельная ветка истечения подписки (BPMN) =====
{"notes": ["Описательная BPMN, isExecutable=false; исполняется канонический Python из Blockly.", "Сначала истечение подписки, затем queued intent, затем context и gate этапов.", "Обычный DONE ещё не означает CLOSED/оплату.", "PROCESS round без expires_at; интервал повторной отправки — не TTL ответа.", "Системный тариф доступа подписки определяется сервисом, связанным category.subscription_service_id.", "Платёжное блокирование после DONE не означает, что вся операция была отменена."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_process.py", "repository": "sharix-open-handlers-examples", "sha256": "f9d07ac1e8bad0c5a8dd55d81110777951e40a9a5fd370b7652386c016a6c1ce"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_process.json", "repository": "sharix-open-handlers-examples", "sha256": "1e6a24a5819d9ab3cc033516c134d97423def1ee8944352d8bea7dd8c966f99a"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"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": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/integration_ports.py", "repository": "sharix-open-backend", "sha256": "d079ec56e6709b29d7755e47d2a88d423235fe8eb1bf7a92851ae25d74bf1066"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/subscription_order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "c50ba934aa44e90125564caff8461788d8454747fe6b0196765c449ff48cd70f"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/payments/facade.py", "repository": "sharix-open-backend", "sha256": "57d0d71939f5bcd391090ca473008f2283e8d7fdb369486ff044e1fcf9cd3876"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_execution_location.py", "repository": "sharix-open-backend", "sha256": "2fc1ad5f63e5b81a245d493c70d3de8e33c194cd3eb2316efde667b06e651ddc"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_pricing.py", "repository": "sharix-open-backend", "sha256": "c69ad3e6b34dc6b9b1aa3b554a9634a49a9ce7ecbb8bd6216e46832857995893"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "apps.py", "repository": "sharix-open-webservice-running", "sha256": "dde02f8eae3449c973b6c0ef66053daa7563116149ccd4da00511fdad50c8e46"}, {"commit": "d5b966a88b2dc782ec3ca7660be17feef5193019", "path": "services/order_execution.py", "repository": "sharix-open-webservice-running", "sha256": "748e6bc20a784347afa9396283e3086a03ccfde30bed86849d934f9588101a91"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/service_pricing_policy.py", "repository": "sharix-open-backend", "sha256": "d8dbaecea24161c385b40d32a7e8657f7a7ba8affc3cc22a89ce835c25a21aa6"}]}
subscription_start
subscription_applicable
subscription_noop
subscription_save
subscription_payment
subscription_allowed
subscription_closed
subscription_blocked
subscription_Flow_0
subscription_Flow_0
subscription_Flow_1
subscription_Flow_2
subscription_Flow_1
subscription_Flow_2
subscription_Flow_3
subscription_Flow_3
subscription_Flow_4
subscription_Flow_4
subscription_Flow_5
subscription_Flow_6
subscription_Flow_5
subscription_Flow_6
''expire-subscription'' требует ''order.expire_subscription''. Он применяется именно к системному тарифу доступа, связанному через category.subscription_service_id, а не ко всем заказам, оплачиваемым/покрытым подпиской. Для обычного заказа возвращается applicable=false, expired=false. Для ещё не наступившего срока или отсутствующего time_finish_placed — expired=false.
Истечение заказа доступа подписки:
- Сохранить time_finish_real=time_finish_placed и real_price=predicted_price.
- Перевести PROCESS → DONE.
- Вызвать ensure_order_can_be_closed.
- Если платёжный gate разрешил — выполнить CLOSED и вернуть expired=true.
Это отдельный путь без подтверждения provider и обычного finish-раунда. Если оплата блокирует закрытие, уже сохранённый DONE требует отдельной проверки.
Если payment gate блокирует уже после DONE, возвращается неуспех, но DONE может быть сохранён. ''expired=false''/его отсутствие не доказывает, что все изменения отменены. PROCESS scope следующего запроса может стать stale, а DONE handler продолжит платёжную финализацию. Это отличается от гарантии одной неделимой операции «либо сразу CLOSED, либо PROCESS».
===== Настройки и диагностика =====
^ Назначение ^ Настройка / источник ^
| Auto-finish после плановой даты | ''SERVICE_REQUEST_PROCESS_AUTO_DONE'' |
| Повтор / ожидание этапов и даты | ''SERVICE_REQUEST_PROCESS_RECHECK_SECONDS'' |
| Стратегия / доставка | ''SERVICE_REQUEST_PROCESS_ROUND_STRATEGY'', ''SERVICE_REQUEST_PROCESS_DELIVERY_POLICY'' |
| Порог рассылки и доменных неуспехов finish | ''SERVICE_REQUEST_PROCESS_NOTIFICATION_ATTEMPTS'' |
| Интервал приглашений | ''SERVICE_REQUEST_PROCESS_NOTIFICATION_INTERVAL_SECONDS'' |
| Общая ошибка / восстановление состава | ''DEFERRED_TICKET_RECHECK_SECONDS'', ''INTERVAL_TIME_BD_REQ'' |
Defer освобождает worker; ответ/событие может сделать Ticket ready раньше. 404 scope очищает устаревшую локальную запись, auth/transport/5xx не считаются отказом исполнителя и идут в processing_error. После commit ''ticket.changed''/''ticket.moved'' передают владение, periodic reconciliation компенсирует потерю события.
Порядок диагностики:
- Определить, обычный ли это заказ или системный доступ подписки.
- Проверить blocking Stage, их flags/status и регистрацию адаптера.
- Сверить planned_finish, активный раунд и маршрут ответа/intent.
- Прочитать результат канонического finish.
- Отдельно проверить сохранённый DONE, платёжную финализацию и CLOSED.
Предупреждение об оплате не является основанием вслепую повторять finish; сначала перечитать Orders/Ticket.
===== Проверенные источники =====
Git SHA/SHA-256 и модели закреплены в metadata/BPMN, сборщик сверяет их перед упаковкой. Handler и бизнес-API не исполнялись. Общий автоматический hook Wiki пока не завершён.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/handlers/open_service_request_process.py|sharix-open-handlers-examples / handlers/open_service_request_process.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handler_blocks/open_service_request_process.json|sharix-open-handlers-examples / generated_handler_blocks/open_service_request_process.json]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/catalog.py|sharix-open-handlers-examples / catalog.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/blockly_runtime.py|sharix-open-handlers-backend / core/blockly_runtime.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/requesters.py|sharix-open-handlers-backend / core/requesters.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/order_action_messages.py|sharix-open-handlers-backend / core/order_action_messages.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/ticket_blockly_codegen.py|sharix-open-handlers-backend / ticket_blockly_codegen.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/ticket_codegen_contract.json|sharix-open-handlers-backend / ticket_codegen_contract.json]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/lib/tickets.py|sharix-open-tickets / lib/tickets.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/api/handler_auth.py|sharix-open-tickets / api/handler_auth.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/signals.py|sharix-open-tickets / signals.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/services/handler_wakeup.py|sharix-open-tickets / services/handler_wakeup.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/apiviews/handler_order_workflow.py|sharix-open-backend / apiviews/handler_order_workflow.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/apiviews/open_api.py|sharix-open-backend / apiviews/open_api.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_handler_relay.py|sharix-open-backend / lib/order_handler_relay.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/handler_order_context.py|sharix-open-backend / lib/handler_order_context.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_workflow_policy.py|sharix-open-backend / lib/order_workflow_policy.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_actions.py|sharix-open-backend / lib/order_actions.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_permissions.py|sharix-open-backend / lib/order_permissions.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/urls.py|sharix-open-backend / urls.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_lifecycle.py|sharix-open-backend / lib/order_lifecycle.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_provider_requirements.py|sharix-open-backend / lib/order_provider_requirements.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/order_rounds.py|sharix-open-handlers-backend / core/order_rounds.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/settings_schema.py|sharix-open-handlers-backend / settings_schema.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/integration_ports.py|sharix-open-backend / lib/integration_ports.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/subscription_order_lifecycle.py|sharix-open-backend / lib/subscription_order_lifecycle.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/payments/facade.py|sharix-open-backend / lib/payments/facade.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_execution_location.py|sharix-open-backend / lib/order_execution_location.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/order_pricing.py|sharix-open-backend / lib/order_pricing.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webservice-running/src/commit/d5b966a88b2dc782ec3ca7660be17feef5193019/apps.py|sharix-open-webservice-running / apps.py]] — Git d5b966a88b2dc782ec3ca7660be17feef5193019.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-webservice-running/src/commit/d5b966a88b2dc782ec3ca7660be17feef5193019/services/order_execution.py|sharix-open-webservice-running / services/order_execution.py]] — Git d5b966a88b2dc782ec3ca7660be17feef5193019.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-backend/src/commit/778a3280cee115ba0efe3fdff7b0e708b0c10093/lib/service_pricing_policy.py|sharix-open-backend / lib/service_pricing_policy.py]] — Git 778a3280cee115ba0efe3fdff7b0e708b0c10093.
===== Связанные материалы =====
* [[sharixopen:knowledge:scenarios:service_request_prestart|PRE_START: начало выполнения и внешние intents]]
* [[sharixopen:knowledge:scenarios:start|Индекс сценариев]]
~~SHARIX_KNOWLEDGE_RELATED~~