{
"id": "ShariXKnowledgeServiceRequestBookedBPMN",
"page": "sharixopen:knowledge:scenarios:service_request_booked",
"area": "open",
"type": "procedure",
"title": "SERVICE_REQUEST в BOOKED: ожидание исполнителя и окно PENDING",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeServiceRequestTemplateBPMN",
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeOpenKnowledgeOperationsRuntimehealth",
"ShariXKnowledgeScenarios"
]
},
"extensions": {
"taxonomy": {
"domain": "business_processes",
"lifecycle": "implemented",
"component": "handlers_examples, handlers_backend, dbsynce",
"parents": [
"ShariXKnowledgeScenarios"
],
"terms": [
"audience_developer",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_orders_assignment",
"topic_orders_lifecycle",
"topic_handlers_runtime",
"service_request",
"ticket_booked",
"provider_offer",
"pending_at",
"bpmn",
"ticket",
"blockly",
"generated_python",
"order"
]
},
"diagram": {
"format": "bpmn",
"executable": false
},
"source_evidence": [
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "handlers/open_service_request_booked.py",
"sha256": "44e066a3ccb7ee21abc8d252a343adf1ea3cbf5e177aebb62ed2059fe1c2f2d8"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "generated_handler_blocks/open_service_request_booked.json",
"sha256": "7096cde8b581cc80b2f0f65dcc63e95adfdfdd8bf459e9a70ee229d329a7dcfc"
},
{
"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"
}
],
"handler_process": {
"handler_id": "open_service_request_booked",
"source_kind": "git_builtin",
"canonical_python_verified": true,
"reviewed_on": "2026-10-28",
"generator": "tools/generate_handler_bpmn.py",
"generator_sha256": "ca837a7b9e55bf58184bdf408a8035d25667ed9c5d3068ca52380b2ff5682f95",
"models": {
"logic": "d526cdde7966b1efc848f899a14ac3eaa8393c604ed9ef71de0d7113a339c039",
"actions": "bb941bf433e339de3682874b4efbfede8e7fca91d1b16eff6257db2f945a6237"
}
},
"diagram_view_bounds": {
"reviewed_on": "2026-10-29",
"models": [
"logic",
"actions"
],
"semantics_unchanged": true,
"utility": "tools/expand_bpmn_view_bounds.py",
"utility_sha256": "f878658b0115773e34f6c3eec72eba5984d873e60d8e2a4336b3dfb2a8026d87"
},
"classification": {
"schema": "sharix.knowledge.classification.v1",
"products": [
"sharix_open"
],
"audiences": [
"developer",
"support",
"reviewer",
"ai"
],
"material": "scenario",
"topics": [
"orders/assignment",
"orders/lifecycle",
"handlers/runtime"
],
"tag_terms": [
"audience_developer",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_orders_assignment",
"topic_orders_lifecycle",
"topic_handlers_runtime",
"service_request",
"ticket_booked",
"provider_offer",
"pending_at",
"bpmn",
"ticket",
"blockly",
"generated_python",
"order"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "lifecycle относится к описываемому коду, а status к редакции документа; implemented не означает успешный runtime тест"
},
"classification_review": {
"date": "2026-10-31",
"source": "Содержание текущей страницы и проверенный словарь классификации",
"body_scope": "rewrite"
},
"source_review_20261031": {
"kind": "source_analysis_not_runtime_acceptance",
"evidence_field": "extensions.source_evidence",
"checked_on": "2026-10-31",
"all_original_evidence_hashes_match_fresh_git": true,
"canonical_generation": "Both runnable and generated copies match; no handler executed."
}
},
"content_sha256": "c273252e44e75a0c3bcd5d4dad510295e15f494c25c22e9c7ef7d3e89414903a",
"schema": 1
}
====== SERVICE_REQUEST в BOOKED: ожидание исполнителя и окно PENDING ======
~~NOCACHE~~
**Назначение:** [[sharixopen:knowledge:classification:materials#scenarij_processa|Сценарий процесса]]. **Продукт:** [[sharixopen:knowledge:classification:products#sharix_open|ShariX Open]].
**Для кого:** [[sharixopen:knowledge:classification:audiences#razrabotchik|Разработчик]] · [[sharixopen:knowledge:classification:audiences#podderzhka|Поддержка]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#naznachenie|Заказы → Назначение]] · [[sharixopen:knowledge:classification:topics#zhiznennyj_cikl|Заказы → Жизненный цикл]] · [[sharixopen:knowledge:classification:topics#runtime|Обработчики → Runtime]].
**Область:** ShariX Open. **Обработчик:** ''open_service_request_booked'', тип ''SERVICE_REQUEST'' (2), рабочий статус ''BOOKED'' (211). 31.10.2026 опубликованные исходники повторно получены из Git. Обе Python-копии заново сопоставлены с результатом генерации Blockly; проверены 11 исходников генераторов. Сам handler не исполнялся. Выбранную версию, конфигурацию и внешние подключения сервера проверяют отдельно.
===== Назначение и границы =====
Handler сопровождает размещённый заказ в таком порядке:
- Попытаться применить одно разрешённое намерение take/cancel.
- Если проход не завершён — загрузить актуальный контекст заказа.
- Проверить окно автоматического перехода в PENDING.
- При отсутствии завершённого перехода назначить повтор.
В BOOKED handler не выбирает кандидатов, не рассылает предложения и не проводит раунд победителя. Это отдельная стадия PENDING.
Условие перехода зависит от заказа:
* **ASAP:** попытка PENDING сразу после проверки intent и загрузки контекста.
* **Плановый заказ:** ждать pending_at.
Универсальный autoaccept здесь не используется.
BPMN имеют ''isExecutable=false''. Wiki не исполняет процесс: runtime выполняет выбранный проверенный Python из Blockly. End event завершает показанную операцию; он не означает завершения услуги.
===== Один проход и ожидание (BPMN) =====
{"notes": ["Git built-in, BPMN isExecutable=false; handler при генерации не исполняется.", "BOOKED не рассылает предложения кандидатам.", "pending_at=planned_start − SERVICE_REQUEST_PRE_START_DURATION_SECONDS − SERVICE_REQUEST_BOOKED_PENDING_LEAD_SECONDS.", "Часы проверки границы — runtime; backend move повторно проверяет статус и отсутствие provider."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_booked.py", "repository": "sharix-open-handlers-examples", "sha256": "44e066a3ccb7ee21abc8d252a343adf1ea3cbf5e177aebb62ed2059fe1c2f2d8"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_booked.json", "repository": "sharix-open-handlers-examples", "sha256": "7096cde8b581cc80b2f0f65dcc63e95adfdfdd8bf459e9a70ee229d329a7dcfc"}, {"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"}]}
booked_start
booked_status
booked_intent
booked_handled
booked_intent_end
booked_stale
booked_stale_end
booked_context
booked_found
booked_missing
booked_reason
booked_asap
booked_due
booked_move
booked_ok
booked_end
booked_defer
booked_intent_error
booked_context_error
booked_move_error
booked_retry
booked_wait
booked_timer
booked_event
booked_ready
booked_Flow_0
booked_Flow_0
booked_Flow_27
booked_Flow_1
booked_Flow_2
booked_Flow_1
booked_Flow_4
booked_Flow_4
booked_Flow_5
booked_Flow_6
booked_Flow_5
booked_Flow_2
booked_Flow_3
booked_Flow_3
booked_Flow_6
booked_Flow_7
booked_Flow_7
booked_Flow_8
booked_Flow_9
booked_Flow_8
booked_Flow_9
booked_Flow_10
booked_Flow_10
booked_Flow_11
booked_Flow_12
booked_Flow_12
booked_Flow_13
booked_Flow_14
booked_Flow_11
booked_Flow_13
booked_Flow_15
booked_Flow_15
booked_Flow_16
booked_Flow_17
booked_Flow_16
booked_Flow_14
booked_Flow_17
booked_Flow_18
booked_Flow_20
booked_Flow_21
booked_Flow_22
booked_Flow_20
booked_Flow_21
booked_Flow_22
booked_Flow_19
booked_Flow_18
booked_Flow_19
booked_Flow_23
booked_Flow_24
booked_Flow_23
booked_Flow_25
deferred_until
booked_Flow_24
booked_Flow_26
booked_Flow_25
booked_Flow_26
booked_Flow_27
Чужой статус запрашивает очистку локального Ticket и комнаты. В своём статусе успешный intent либо stale завершают проход. Если намерение не найдено или доменное пользовательское действие отклонено, handler продолжает обычную проверку BOOKED и загружает scoped order context.
После контекста записывается локальная причина ''awaiting_pending_window''. ASAP идёт к ''move-booked-to-pending'' без ожидания планового окна. Иначе ''pending_at'' сравнивается с текущим временем runtime. Подтверждённый успех/stale исключает Ticket из очереди; обработанный доменный отказ оставляет его для повтора по ''SERVICE_REQUEST_BOOKED_RECHECK_SECONDS''.
Ошибки контекста и action трактуются отдельно:
* **404:** устаревший scope, запрашивается локальная очистка.
* **Нет единственного связанного Orders:** конфликт API, а не выбор произвольной записи.
* **Auth, 5xx или неожиданный ответ:** processing_error с DEFERRED_TICKET_RECHECK_SECONDS.
===== Временная граница =====
Контекст рассчитывает:
* ''planned_start'' — корректное ''Orders.time_start'';
* ''pre_start_at'' — planned_start минус ''SERVICE_REQUEST_PRE_START_DURATION_SECONDS'';
* ''pending_at'' — pre_start_at минус ''SERVICE_REQUEST_BOOKED_PENDING_LEAD_SECONDS''.
Это не отсчёт от даты создания Ticket. При отсутствующем/некорректном pending_at плановая граница не считается достигнутой; исправление даты может потребоваться отдельно. ASAP использует свою явную ветвь и не ждёт наличия pending_at.
Дату сравнивает runtime. Backend ''move_booked_order_to_pending_as_handler'' повторно проверяет актуальный BOOKED и отсутствие provider под блокировкой, но не пересчитывает время окна. Поэтому выбранный Python и именованные параметры тайминга являются частью политики перехода.
===== Канонические действия и внешние участники (BPMN) =====
{"notes": ["Git built-in, BPMN isExecutable=false; handler при генерации не исполняется.", "BOOKED не рассылает предложения кандидатам.", "pending_at=planned_start − SERVICE_REQUEST_PRE_START_DURATION_SECONDS − SERVICE_REQUEST_BOOKED_PENDING_LEAD_SECONDS.", "Часы проверки границы — runtime; backend move повторно проверяет статус и отсутствие provider.", "Общий transport/202/direct actions разобран в TEMPLATE. Здесь — отличающиеся канонические действия BOOKED."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_booked.py", "repository": "sharix-open-handlers-examples", "sha256": "44e066a3ccb7ee21abc8d252a343adf1ea3cbf5e177aebb62ed2059fe1c2f2d8"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_booked.json", "repository": "sharix-open-handlers-examples", "sha256": "7096cde8b581cc80b2f0f65dcc63e95adfdfdd8bf459e9a70ee229d329a7dcfc"}, {"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"}]}
backend_user
backend_acl
backend_choice
backend_take
backend_taken
backend_cancel
backend_cancelled
backend_move
backend_scope
backend_state
backend_save
backend_done
backend_reject
backend_Flow_0
backend_Flow_0
backend_Flow_1
backend_Flow_1
backend_Flow_2
backend_Flow_4
Назначить только допустимого Provider; недостающие check-действия могут быть подготовлены без успешного take.
backend_Flow_2
backend_Flow_3
backend_Flow_3
backend_Flow_4
backend_Flow_5
backend_Flow_5
backend_Flow_6
backend_Flow_6
backend_Flow_7
backend_Flow_7
backend_Flow_8
backend_Flow_10
backend_Flow_8
backend_Flow_9
backend_Flow_9
backend_Flow_10
Доставка через доверенный ''handler-intents'' и прямой actions API описаны в [[sharixopen:knowledge:scenarios:service_request_template|TEMPLATE]]. Ответ 202 relay не доказывает исполнение. Runtime принимает доверенное намерение в память, а backend повторно проверяет actor и актуальное состояние. После рестарта intent-очередь не заменяет persisted результат заказа.
==== Взять заказ ====
''take'' доступен допустимому исполнителю, пока заказ BOOKED и provider ещё не назначен. Каноническая операция проверяет роль исполнителя сервиса, совместимый active Provider по service/company/resource, применимую политику одновременных заказов и требования выбранного исполнителя. Только затем сохраняет provider и переводит в ASSIGNED.
Подготовка недостающих check-действий может закончиться отказом взять заказ, если requirements ещё не удовлетворены. Появление такой заявки проверки не является успешным назначением, а этот BOOKED handler не обещает автоматически повторить уже отклонённый пользовательский take после её завершения. Нужно смотреть фактический ответ и состояние.
==== Отменить заказ ====
Допустимый автор/личный клиент может отменить свой BOOKED-заказ. Цель этой стадии — CANCELLED. Это отличается от отмены TEMPLATE, которая ведёт в CLOSED. Приоритет обработки queued intent перед автоматическим окном не отменяет backend-проверку актуального состояния и прав пользователя.
==== Перейти в PENDING ====
Узкий handler endpoint требует ''order.move_booked_to_pending'', Ticket scope и единственный связанный заказ. Под блокировкой backend отвергает переход, если стадия уже не BOOKED или provider уже появился. Он не удаляет назначенного исполнителя ради поиска и не переводит заказ в PENDING по старому локальному снимку.
Успешный переход сохраняется каноническим action layer с Event и commit-событиями. Следующий владелец получает PENDING, прежний BOOKED исключает свой снимок по ''ticket.moved''; потеря доставки восстанавливается scoped periodic reconciliation. Гонка take и автоматического перехода решается актуальным состоянием backend, а не очередностью уведомлений на экране.
===== Ожидание и диагностика =====
^ Назначение ^ Настройка / состояние ^
| Обычный повтор BOOKED | ''SERVICE_REQUEST_BOOKED_RECHECK_SECONDS'', ''awaiting_pending_window'' |
| Плановое окно | ''SERVICE_REQUEST_PRE_START_DURATION_SECONDS'' и ''SERVICE_REQUEST_BOOKED_PENDING_LEAD_SECONDS'' |
| Общее исключение | ''DEFERRED_TICKET_RECHECK_SECONDS'', ''processing_error'' |
| Сверка очереди | ''INTERVAL_TIME_BD_REQ'' |
Defer хранится в памяти и освобождает worker. Новая authoritative revision либо разрешённый queued intent могут сделать Ticket готовым раньше; повтор того же снимка не сбрасывает обычное ожидание. Фактический запуск зависит от соединения и свободного worker. Ошибка API-списка не равна подтверждённой пустой очереди.
При долгом BOOKED проверить:
* ASAP, planned_start и pending_at;
* действующие именованные параметры времени;
* актуальный provider;
* для take — результат relay, канонического действия, подготовленных проверок и сохранённый ASSIGNED.
BOOKED с заполненным provider требует разбора согласованности; удалять provider ради успешного PENDING нельзя. Ожидание планового окна штатно. Предложения кандидатам относятся к PENDING, поэтому их отсутствие в BOOKED само по себе не означает поломку.
===== Проверенные источники =====
Git SHA/SHA-256 и параметры моделей закреплены в metadata и documentation BPMN. Handler и бизнес-действия при анализе не выполнялись; изменение источников требует повторного сопоставления.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/handlers/open_service_request_booked.py|sharix-open-handlers-examples / handlers/open_service_request_booked.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handler_blocks/open_service_request_booked.json|sharix-open-handlers-examples / generated_handler_blocks/open_service_request_booked.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.
===== Связанные материалы =====
* [[sharixopen:knowledge:scenarios:service_request_template|TEMPLATE и внешние пользовательские входы]]
* [[sharixopen:knowledge:modules:handlers|Каноническая разработка обработчиков]]
* [[sharixopen:knowledge:scenarios:start|Все сценарии]]
~~SHARIX_KNOWLEDGE_RELATED~~