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