{
"id": "ShariXKnowledgeAccessRequestPendingBPMN",
"page": "sharixopen:knowledge:scenarios:access_request_pending",
"area": "open",
"type": "procedure",
"title": "ACCESS_REQUEST в PENDING: рассмотрение запроса на право",
"status": "review",
"schema_version": 1,
"relations": {
"related_to": [
"ShariXKnowledgeOpenKnowledgeModulesHandlers",
"ShariXKnowledgeOpenKnowledgeOperationsRuntimehealth",
"ShariXKnowledgeSTRequestInProcessBPMN",
"ShariXKnowledgeScenarios"
],
"depends_on": [
"ShariXKnowledgeOpenKnowledgeModulesHandlers"
],
"verified_by": [
"ShariXKnowledgeVerification"
]
},
"extensions": {
"taxonomy": {
"domain": "business_processes",
"lifecycle": "implemented",
"component": "handlers_examples, handlers_backend, tickets, dbsynce",
"parents": [
"ShariXKnowledgeScenarios"
],
"terms": [
"audience_developer",
"audience_administrator",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_handlers_permissions",
"topic_security_permissions",
"topic_handlers_runtime",
"access_request",
"ticket_pending",
"permissions",
"bpmn",
"ticket",
"blockly",
"generated_python"
]
},
"diagram": {
"format": "bpmn",
"executable": false
},
"source_evidence": [
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "handlers/open_access_request_pending.py",
"sha256": "ca7c362ab1bddd1712bc569100d827297402ffde74badaab5e4f8847c09800a6"
},
{
"repository": "sharix-open-handlers-examples",
"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb",
"path": "generated_handler_blocks/open_access_request_pending.json",
"sha256": "06b959d4511d9b64e0b6a2a1d1c0ba118199d913c15f6206d086edaf6072099d"
},
{
"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/handler_operations.py",
"sha256": "28620658501c375f556e24437871620b84a17a88d0b62b2d1a3cc5deb2f14b1e"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/data_parsers.py",
"sha256": "d7f26f172f68e4b390f675de88fbfb3c37a58fb29d4bf3d6687b31bd7953f9e4"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/ejabberd_muc.py",
"sha256": "35c2eba89fab36b5c444439a87beaa516b55133991136d5370418d92a18d7bcd"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "core/requesters.py",
"sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"
},
{
"repository": "sharix-open-handlers-backend",
"commit": "50baf376e224d915a87d63240f3f339b3dda9afa",
"path": "classes/AccessRequestTicket.py",
"sha256": "3f3a498ae76b3d878b19a8f32170fc2a71c6c6c182bf34a6ecc50edf7b0f5eff"
},
{
"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/views/handler_workflow.py",
"sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "api/handler_auth.py",
"sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "utils.py",
"sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"
},
{
"repository": "sharix-open-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "views/ticket_detail.py",
"sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"
},
{
"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-tickets",
"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
"path": "models/ticket.py",
"sha256": "4768d9ef47b61bf3ae98bf2749ed142adc477978b44de29177363ba9664baa43"
}
],
"handler_process": {
"handler_id": "open_access_request_pending",
"source_kind": "git_builtin",
"canonical_python_verified": true,
"reviewed_on": "2026-10-28",
"generator": "tools/generate_handler_bpmn.py",
"generator_sha256": "ca837a7b9e55bf58184bdf408a8035d25667ed9c5d3068ca52380b2ff5682f95",
"models": {
"logic": "c087c0074305a376e6a1b17911b93290b39f79340777e820d601d918e852c700",
"external": "9a399efe3d5d19f5592dda76f6c97f914ea25745230c7aaffe8f56f3cb0a9bd1"
}
},
"diagram_view_bounds": {
"reviewed_on": "2026-10-29",
"models": [
"logic"
],
"semantics_unchanged": true,
"utility": "tools/expand_bpmn_view_bounds.py",
"utility_sha256": "f878658b0115773e34f6c3eec72eba5984d873e60d8e2a4336b3dfb2a8026d87"
},
"classification": {
"schema": "sharix.knowledge.classification.v1",
"products": [
"sharix_open"
],
"audiences": [
"developer",
"administrator",
"support",
"reviewer",
"ai"
],
"material": "scenario",
"topics": [
"handlers/permissions",
"security/permissions",
"handlers/runtime"
],
"tag_terms": [
"audience_developer",
"audience_administrator",
"audience_support",
"audience_reviewer",
"audience_ai",
"product_sharix_open",
"material_scenario",
"topic_handlers_permissions",
"topic_security_permissions",
"topic_handlers_runtime",
"access_request",
"ticket_pending",
"permissions",
"bpmn",
"ticket",
"blockly",
"generated_python"
],
"registry_document": "ShariXKnowledgeClassification",
"state_meaning": "implemented — описана проверенная реализация исходников; серверный runtime отдельно; review — состояние текста"
},
"editorial_review": {
"date": "2026-10-31",
"scope": "Конкретизация шагов, участников, условий, результатов и диагностики; перечисления; BPMN сохранены побайтово",
"current_source_records_verified": 19,
"original_source_evidence_recheck": "Все исходные commits и SHA-256 повторно совпали после git fetch; дополнительные функциональные источники включены в source_evidence",
"canonical_regeneration": {
"both_python_copies_match": true,
"generator_sources_verified": 11,
"handler_executed": false
},
"runtime_checked": false,
"correction": "Из PENDING доступны только ACCEPTED и DECLINED; прежнее упоминание прямого CLOSED исправлено по LIFE_CYCLE_DICT"
}
},
"content_sha256": "a03738eda1548ff824a05a8bf6c3d33cda5b8e1366db1027013d6820cacb0d6d",
"schema": 1
}
====== ACCESS_REQUEST в 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#administrator|Администратор]] · [[sharixopen:knowledge:classification:audiences#podderzhka|Поддержка]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]].
**Темы:** [[sharixopen:knowledge:classification:topics#access_request|Обработчики → ACCESS_REQUEST]] · [[sharixopen:knowledge:classification:topics#polnomochija|Доступ → Полномочия]] · [[sharixopen:knowledge:classification:topics#runtime|Обработчики → Runtime]].
**Область:** ShariX Open. **Обработчик:** ''open_access_request_pending'', тип ''ACCESS_REQUEST'' (3), рабочий статус ''PENDING'' (320). 31.10.2026 исходники повторно получены из Git: обе Python-копии совпали с новой канонической генерацией Blockly, проверены 11 исходников генераторов. Сам handler не исполнялся. Выбранная серверная версия, её настройки и работающие API/XMPP проверяются отдельно.
===== Назначение и границы =====
Обработчик сопровождает запрос на право до решения:
* при ручном режиме сообщает о заявке и ждёт;
* при автоматическом режиме запрашивает ACCEPTED и передаёт Ticket следующему handler;
* не создаёт Permissions, не активирует право и не подтверждает выполнение всех требований.
Принятие запроса и фактическая активация права — разные операции.
Порядок первых проверок:
- Проверить рабочий PENDING.
- Если assigned_to is not None — запросить удаление локального Ticket и комнаты и закончить проход.
- Только для неназначенной заявки читать ACCREQ_AUTOACCEPT и выбирать ручную/автоматическую ветвь.
Исключение назначенного Ticket не меняет бизнес-статус. Если он остаётся PENDING, scoped список по типу и статусу может вернуть его при следующей периодической сверке. Это не автоматическое принятие и не устойчивый перевод в следующую стадию.
Следующая развилка использует ''ACCREQ_AUTOACCEPT'', а не настройку ST_REQUEST. Значение берётся при создании HandlerContext. Изменение окружения не следует считать уже применённым к работающему процессу без проверки его конфигурации/перезапуска.
===== Один проход и ожидание (BPMN) =====
{"notes": ["Git built-in и внешние контракты, без выполнения обработчика.", "BPMN isExecutable=false. End event — конец показанного прохода, не предоставление права.", "deferred_until — символ локального срока, не настройка сервера."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_access_request_pending.py", "repository": "sharix-open-handlers-examples", "sha256": "ca7c362ab1bddd1712bc569100d827297402ffde74badaab5e4f8847c09800a6"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_access_request_pending.json", "repository": "sharix-open-handlers-examples", "sha256": "06b959d4511d9b64e0b6a2a1d1c0ba118199d913c15f6206d086edaf6072099d"}, {"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/handler_operations.py", "repository": "sharix-open-handlers-backend", "sha256": "28620658501c375f556e24437871620b84a17a88d0b62b2d1a3cc5deb2f14b1e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/data_parsers.py", "repository": "sharix-open-handlers-backend", "sha256": "d7f26f172f68e4b390f675de88fbfb3c37a58fb29d4bf3d6687b31bd7953f9e4"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/ejabberd_muc.py", "repository": "sharix-open-handlers-backend", "sha256": "35c2eba89fab36b5c444439a87beaa516b55133991136d5370418d92a18d7bcd"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "classes/AccessRequestTicket.py", "repository": "sharix-open-handlers-backend", "sha256": "3f3a498ae76b3d878b19a8f32170fc2a71c6c6c182bf34a6ecc50edf7b0f5eff"}, {"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/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}]}
access_start
access_status
access_assigned
access_auto
access_notify
access_defer
access_cleanup
access_end
access_transition
access_confirmed
access_handoff
access_remove
access_accepted
access_missing
access_notify_error
access_api_error
access_send_error
access_retry
access_wait
access_timer
access_revision
access_ready
access_Flow_0
access_Flow_0
access_Flow_23
access_Flow_1
access_Flow_2
access_Flow_1
access_Flow_3
access_Flow_4
access_Flow_3
access_Flow_6
access_Flow_9
METASERVICE-ADMIN, JID текущего bot и report JID; не автоматическая выдача роли.
access_Flow_6
access_Flow_7
ACCESS_REQUEST_PENDING_RECHECK_SECONDS
access_Flow_7
access_Flow_8
access_Flow_2
access_Flow_4
access_Flow_5
access_Flow_5
access_Flow_9
access_Flow_10
access_Flow_10
access_Flow_11
access_Flow_12
access_Flow_12
access_Flow_13
access_Flow_13
access_Flow_14
access_Flow_14
access_Flow_11
access_Flow_15
access_Flow_16
access_Flow_17
DEFERRED_TICKET_RECHECK_SECONDS; committed ACCEPTED не откатывается.
access_Flow_15
access_Flow_16
access_Flow_17
access_Flow_18
access_Flow_8
access_Flow_18
access_Flow_19
access_Flow_20
access_Flow_19
access_Flow_21
deferred_until
access_Flow_20
access_Flow_22
access_Flow_21
access_Flow_22
access_Flow_23
* Чужой статус либо уже заполненный ''assigned_to'' — убрать локальный Ticket и комнату, не менять бизнес-статус.
* Неназначенный Ticket, autoaccept выключен — сформировать сообщение о запрошенной роли, группе согласования и реквизитах заявки, отправить его в MUC-комнату Ticket, записать ''manual_access_decision'' и назначить defer по ''ACCESS_REQUEST_PENDING_RECHECK_SECONDS''.
* Неназначенный Ticket, autoaccept включён — запросить ''ACCEPTED'' через scoped Ticket API, явно передать в ''open_access_request_accepted'' и убрать текущий Ticket с сохранением комнаты после успешной передачи.
Различать ответы перехода и последующие ошибки:
* **404 scoped transition:** Ticket вышел из доступного контекста, запрашивается локальная очистка.
* **Ошибка API либо уведомления:** общий processing_error и DEFERRED_TICKET_RECHECK_SECONDS.
* **ACCEPTED сохранён, прямая XMPP-передача не удалась:** сохранённое решение не откатывается; wakeup и periodic reconciliation позволяют следующему владельцу восстановить очередь.
===== Ручное решение и внешние участники (BPMN) =====
{"notes": ["Git built-in и внешние контракты, без выполнения обработчика.", "BPMN isExecutable=false. End event — конец показанного прохода, не предоставление права.", "deferred_until — символ локального срока, не настройка сервера.", "Участие в XMPP комнате не выдаёт право менять Ticket. Текст сообщения не является командой смены статуса."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_access_request_pending.py", "repository": "sharix-open-handlers-examples", "sha256": "ca7c362ab1bddd1712bc569100d827297402ffde74badaab5e4f8847c09800a6"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_access_request_pending.json", "repository": "sharix-open-handlers-examples", "sha256": "06b959d4511d9b64e0b6a2a1d1c0ba118199d913c15f6206d086edaf6072099d"}, {"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/handler_operations.py", "repository": "sharix-open-handlers-backend", "sha256": "28620658501c375f556e24437871620b84a17a88d0b62b2d1a3cc5deb2f14b1e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/data_parsers.py", "repository": "sharix-open-handlers-backend", "sha256": "d7f26f172f68e4b390f675de88fbfb3c37a58fb29d4bf3d6687b31bd7953f9e4"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/ejabberd_muc.py", "repository": "sharix-open-handlers-backend", "sha256": "35c2eba89fab36b5c444439a87beaa516b55133991136d5370418d92a18d7bcd"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "classes/AccessRequestTicket.py", "repository": "sharix-open-handlers-backend", "sha256": "3f3a498ae76b3d878b19a8f32170fc2a71c6c6c182bf34a6ecc50edf7b0f5eff"}, {"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/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}]}
person_notice
person_review
person_choose
person_send
person_end
person_Flow_0
person_Flow_0
person_Flow_1
person_Flow_1
person_Flow_2
person_Flow_2
person_Flow_3
person_Flow_3
{"notes": ["Git built-in и внешние контракты, без выполнения обработчика.", "BPMN isExecutable=false. End event — конец показанного прохода, не предоставление права.", "deferred_until — символ локального срока, не настройка сервера.", "Участие в XMPP комнате не выдаёт право менять Ticket. Текст сообщения не является командой смены статуса."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_access_request_pending.py", "repository": "sharix-open-handlers-examples", "sha256": "ca7c362ab1bddd1712bc569100d827297402ffde74badaab5e4f8847c09800a6"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_access_request_pending.json", "repository": "sharix-open-handlers-examples", "sha256": "06b959d4511d9b64e0b6a2a1d1c0ba118199d913c15f6206d086edaf6072099d"}, {"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/handler_operations.py", "repository": "sharix-open-handlers-backend", "sha256": "28620658501c375f556e24437871620b84a17a88d0b62b2d1a3cc5deb2f14b1e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/data_parsers.py", "repository": "sharix-open-handlers-backend", "sha256": "d7f26f172f68e4b390f675de88fbfb3c37a58fb29d4bf3d6687b31bd7953f9e4"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/ejabberd_muc.py", "repository": "sharix-open-handlers-backend", "sha256": "35c2eba89fab36b5c444439a87beaa516b55133991136d5370418d92a18d7bcd"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "classes/AccessRequestTicket.py", "repository": "sharix-open-handlers-backend", "sha256": "3f3a498ae76b3d878b19a8f32170fc2a71c6c6c182bf34a6ecc50edf7b0f5eff"}, {"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/views/handler_workflow.py", "repository": "sharix-open-tickets", "sha256": "f97c4b467a9a30749f5c4b86b39a833c430e57aaa1f030f70030d9b5c609d368"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "utils.py", "repository": "sharix-open-tickets", "sha256": "a5680205c6522e1d9a74d9d267fe9ee96faf6f06436b00877fc0a93d80234bf5"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "views/ticket_detail.py", "repository": "sharix-open-tickets", "sha256": "05d344b0fba14cf895400694d4a18f486c800fef08dd1acb43ea46909b9e7e59"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}]}
backend_request
backend_acl
backend_allowed
backend_save
backend_publish
backend_end
backend_reject
backend_Flow_0
backend_Flow_0
backend_Flow_1
backend_Flow_1
backend_Flow_2
backend_Flow_3
backend_Flow_2
backend_Flow_4
backend_Flow_4
backend_Flow_5
backend_Flow_5
backend_Flow_3
Текущий LIFE_CYCLE_DICT разрешает из PENDING (320) ровно два перехода:
* **ACCEPTED (321):** запрос принят, профильный handler продолжает требования и активацию.
* **DECLINED (359):** запрос отклонён, далее действует отдельный сценарий отказа.
Прямого PENDING → CLOSED в текущем коде нет; прежнее упоминание такого исхода здесь исправлено. BPMN уже показывает ACCEPTED/DECLINED. Право читать заявку и право принять решение проверяются отдельно; авторство не даёт права одобрить собственный запрос.
Уведомление или ответ текстом в XMPP-комнате не являются реализованным действием смены статуса в этом handler. Пользователь выполняет решение через разрешённую карточку/API; backend проверяет права и lifecycle, сохраняет статус и Event, после commit отправляет ''ticket.changed'' новому владельцу и ''ticket.moved'' прежнему. Ошибка доставки не отменяет сохранённое решение. Прежний in-flight worker учитывает pending discard после завершения прохода.
После ACCEPTED следующий handler проверяет связанную permission, обязательные requirements и результат активации; после DECLINED действует отдельная логика отказа/очистки. Само автоматическое принятие PENDING не доказывает наличия Permissions, выдачи роли или готовности всех требований.
===== Как устроено уведомление в этой реализации =====
notify_admins отправляет сообщение в комнату ticket__type_3 через ejabberd API. Состав комнаты:
* активные пользователи METASERVICE-ADMIN с XMPP-реквизитами;
* JID текущего bot;
* report JID.
Повторяющиеся JID исключаются. Этот локальный helper получает пользователей через Django-контекст.
Поле ''decision_maker_group'' входит в текст уведомления, но в этом пути не является фильтром участников комнаты. Это отличается от адресного reviewer API профильных ST_REQUEST-проверок: нельзя автоматически переносить его правила получателей на данный handler. Участие в комнате не выдаёт права на Ticket.
Helper пытается создать members-only комнату, добавить/подписать/пригласить участников. Часть ошибок подготовки ловится и логируется, затем комната попадает в локальный cache; это не доказательство успешной доставки всем участникам. Само сообщение отправляется отдельно. В этом пути нет durable ack ключа, как у verification notifications: при повторных проходах ручной ветви сообщение может отправляться снова. Уведомление не гарантирует прочтение человеком.
Сообщение формируется из AccessRequestTicket и JSON payload:
* requested_role — обязательный реквизит конструктора;
* decision_maker_group — реквизит текста, а не фильтр участников этой комнаты;
* promocode и comment могут присутствовать, но промокод здесь не валидируется и не даёт основания для автоматического права.
Несовместимый или пустой JSON может приводить к общему retry; сам повтор не исправляет структуру заявки.
===== Таймеры и восстановление =====
^ Ситуация ^ Поведение ^
| Ручное рассмотрение | ''ACCESS_REQUEST_PENDING_RECHECK_SECONDS'', причина ''manual_access_decision'' |
| Ошибка обработки | ''DEFERRED_TICKET_RECHECK_SECONDS'', ''processing_error'' |
| Сверка очереди | ''INTERVAL_TIME_BD_REQ'', scoped PENDING-список |
Defer хранится в памяти и освобождает worker. Срок означает готовность, а не точное время запуска. Новая authoritative revision снимает ожидание; повтор того же снимка — нет. После рестарта очередь заново получает актуальные Ticket. Ошибка API-списка не должна восприниматься как подтверждённое отсутствие заявок.
===== Что проверить при отсутствии движения =====
Порядок диагностики:
- Прочитать статус и assigned_to: назначение пользователя не равно решению.
- Для PENDING сверить выбранную версию, ACCREQ_AUTOACCEPT и корректность JSON.
- В ручном режиме проверить подготовку MUC-комнаты, сообщение и участников.
- Проверить права рассматривающего, scoped transition API и доставку commit-событий.
- Если Ticket уже ACCEPTED, продолжить проверку требований и активации в следующем сценарии.
Не следует повторно принимать запрос только потому, что право ещё не стало active.
===== Проверенные источники =====
В metadata и documentation BPMN закреплены Git SHA, SHA-256 и параметры моделей. Алгоритм проверен по Blockly/Python, внешние действия — по runtime, room helper и view/API/ACL. Схемы имеют ''isExecutable=false''; код обработчиков во время анализа/генерации не запускается.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/handlers/open_access_request_pending.py|sharix-open-handlers-examples / handlers/open_access_request_pending.py]] — Git 76e0c693b628ed4a1fa34515a3f8abdff26149bb.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-examples/src/commit/76e0c693b628ed4a1fa34515a3f8abdff26149bb/generated_handler_blocks/open_access_request_pending.json|sharix-open-handlers-examples / generated_handler_blocks/open_access_request_pending.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/handler_operations.py|sharix-open-handlers-backend / core/handler_operations.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/data_parsers.py|sharix-open-handlers-backend / core/data_parsers.py]] — Git 50baf376e224d915a87d63240f3f339b3dda9afa.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-handlers-backend/src/commit/50baf376e224d915a87d63240f3f339b3dda9afa/core/ejabberd_muc.py|sharix-open-handlers-backend / core/ejabberd_muc.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/classes/AccessRequestTicket.py|sharix-open-handlers-backend / classes/AccessRequestTicket.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/views/handler_workflow.py|sharix-open-tickets / api/views/handler_workflow.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/utils.py|sharix-open-tickets / utils.py]] — Git fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14.
* [[https://git.sharix-app.org/ShariX_Open/sharix-open-tickets/src/commit/fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14/views/ticket_detail.py|sharix-open-tickets / views/ticket_detail.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.
===== Связанные материалы =====
* [[sharixopen:knowledge:modules:handlers|Обработчики и граница исполнения]]
* [[sharixopen:knowledge:scenarios:st_request_inprocess|Профильные ST_REQUEST-проверки]]
* [[sharixopen:knowledge:scenarios:start|Все сценарии]]
~~SHARIX_KNOWLEDGE_RELATED~~