Инструменты пользователя

Инструменты сайта


sharixopen:knowledge:scenarios:access_request_pending

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
sharixopen:knowledge:scenarios:access_request_pending [2026/10/28 19:36] – [sharixknowledge] approved package sx_knowledge_api_opensharixopen:knowledge:scenarios:access_request_pending [2026/10/31 11:50] (текущий) – [sharixknowledge] approved package sx_knowledge_api_open
Строка 14: Строка 14:
             "ShariXKnowledgeSTRequestInProcessBPMN",             "ShariXKnowledgeSTRequestInProcessBPMN",
             "ShariXKnowledgeScenarios"             "ShariXKnowledgeScenarios"
 +        ],
 +        "depends_on": [
 +            "ShariXKnowledgeOpenKnowledgeModulesHandlers"
 +        ],
 +        "verified_by": [
 +            "ShariXKnowledgeVerification"
         ]         ]
     },     },
Строка 20: Строка 26:
             "domain": "business_processes",             "domain": "business_processes",
             "lifecycle": "implemented",             "lifecycle": "implemented",
-            "component": "handlers",+            "component": "handlers_examples, handlers_backend, tickets, dbsynce",
             "parents": [             "parents": [
                 "ShariXKnowledgeScenarios"                 "ShariXKnowledgeScenarios"
             ],             ],
             "terms": [             "terms": [
-                "ACCESS_REQUEST", +                "audience_developer", 
-                "PENDING", +                "audience_administrator", 
-                "Permissions", +                "audience_support", 
-                "BPMN"+                "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"
             ]             ]
         },         },
Строка 143: Строка 162:
                 "path": "services/handler_wakeup.py",                 "path": "services/handler_wakeup.py",
                 "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"                 "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"
 +            },
 +            {
 +                "repository": "sharix-open-tickets",
 +                "commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14",
 +                "path": "models/ticket.py",
 +                "sha256": "4768d9ef47b61bf3ae98bf2749ed142adc477978b44de29177363ba9664baa43"
             }             }
         ],         ],
Строка 156: Строка 181:
                 "external": "9a399efe3d5d19f5592dda76f6c97f914ea25745230c7aaffe8f56f3cb0a9bd1"                 "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": "f1f9362aef6cfb51ea213501281445ff2c9b42d719562de1b8b5f608f5de47da",+    "content_sha256": "a03738eda1548ff824a05a8bf6c3d33cda5b8e1366db1027013d6820cacb0d6d",
     "schema": 1     "schema": 1
 } }
Строка 165: Строка 252:
 ~~NOCACHE~~ ~~NOCACHE~~
  
-**Область:** ShariX Open. **Обработчик:** ''open_access_request_pending'', тип ''ACCESS_REQUEST'' (3), рабочий статус ''PENDING'' (320). Опубликованный встроенный Python на 28.10.2026 побайтово совпадает с канонической генерацией из Blockly workspace. Состояние выбранной версии конкретного сервера проверяется отдельно.+**Назначение:** [[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 проверяются отдельно.
  
 ===== Назначение и границы ===== ===== Назначение и границы =====
-Обработчик сопровождает запрос на предоставление права до решения. Он не создаёт Permissions, не проверяет все требования и не активирует право. При автоматическом режиме запрашивается стадия ''ACCEPTED'' и Ticket передаётся следующему handler; активация остаётся отдельной операцией с доменными проверками.+Обработчик сопровождает запрос на право до решения: 
 + 
 +  * при ручном режиме сообщает о заявке и ждёт; 
 +  * при автоматическом режиме запрашивает ACCEPTED и передаёт Ticket следующему handler; 
 +  * не создаёт Permissions, не активирует право и не подтверждает выполнение всех требований. 
 + 
 +Принятие запроса и фактическая активация права — разные операции. 
 + 
 +Порядок первых проверок: 
 + 
 +  - Проверить рабочий PENDING. 
 +  - Если assigned_to is not None — запросить удаление локального Ticket и комнаты и закончить проход. 
 +  - Только для неназначенной заявки читать ACCREQ_AUTOACCEPT и выбирать ручную/автоматическую ветвь.
  
-Первый фильтр после рабочего статуса — ''assigned_to is not None''. Если Ticket уже назначен, текущий проход запрашивает его удаление из локальной очереди и удаление комнаты. Это не положительное решение и не передача в ACCEPTED: статус не меняется. Scoped список PENDING фильтруется по типу и статусу, поэтому при сохранении PENDING такая карточка может снова попасть из periodic reconciliation и вновь быть исключена. Назначение пользователя и решение по заявке следует различать.+Исключение назначенного Ticket не меняет бизнес-статус. Если он остаётся PENDING, scoped список по типу и статусу может вернуть его при следующей периодической сверке. Это не автоматическое принятие и не устойчивый перевод в следующую стадию.
  
 Следующая развилка использует ''ACCREQ_AUTOACCEPT'', а не настройку ST_REQUEST. Значение берётся при создании HandlerContext. Изменение окружения не следует считать уже применённым к работающему процессу без проверки его конфигурации/перезапуска. Следующая развилка использует ''ACCREQ_AUTOACCEPT'', а не настройку ST_REQUEST. Значение берётся при создании HandlerContext. Изменение окружения не следует считать уже применённым к работающему процессу без проверки его конфигурации/перезапуска.
Строка 177: Строка 284:
 <sharix-bpmn> <sharix-bpmn>
 <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_access_pending_logic" targetNamespace="urn:sharix:knowledge:handlers">+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:ns2="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:ns3="http://www.omg.org/spec/DD/20100524/DC" xmlns:ns4="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_access_pending_logic" targetNamespace="urn:sharix:knowledge:handlers">
   <bpmn:process id="access_Process_access" name="open_access_request_pending: решение о запросе, не активация права" isExecutable="false">   <bpmn:process id="access_Process_access" name="open_access_request_pending: решение о запросе, не активация права" isExecutable="false">
     <bpmn:documentation>{"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"}]}</bpmn:documentation>     <bpmn:documentation>{"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"}]}</bpmn:documentation>
Строка 338: Строка 445:
     <bpmn:participant id="access_Pool_access" name="open_access_request_pending: решение о запросе, не активация права" processRef="access_Process_access" />     <bpmn:participant id="access_Pool_access" name="open_access_request_pending: решение о запросе, не активация права" processRef="access_Process_access" />
   </bpmn:collaboration>   </bpmn:collaboration>
-  <bpmndi:BPMNDiagram id="Diagram_access_pending_logic"> +  <ns2:BPMNDiagram id="Diagram_access_pending_logic"> 
-    <bpmndi:BPMNPlane id="Plane_access_pending_logic" bpmnElement="Collaboration_access_pending_logic"> +    <ns2:BPMNPlane id="Plane_access_pending_logic" bpmnElement="Collaboration_access_pending_logic"> 
-      <bpmndi:BPMNShape id="access_DI_Pool_access" bpmnElement="access_Pool_access" isHorizontal="true"> +      <ns2:BPMNShape id="access_DI_Pool_access" bpmnElement="access_Pool_access" isHorizontal="true"> 
-        <dc:Bounds x="0.0" y="0.0" width="2010" height="970" /> +        <ns3:Bounds x="0.0" y="0.0" width="2080.0" height="970.0" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_Lane_worker" bpmnElement="access_Lane_worker" isHorizontal="true"> +      <ns2:BPMNShape id="access_DI_Lane_worker" bpmnElement="access_Lane_worker" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="0.0" width="1980" height="585.0" /> +        <ns3:Bounds x="30.0" y="0.0" width="2050.0" height="585.0" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_Lane_queue" bpmnElement="access_Lane_queue" isHorizontal="true"> +      <ns2:BPMNShape id="access_DI_Lane_queue" bpmnElement="access_Lane_queue" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="585.0" width="1980" height="385.0" /> +        <ns3:Bounds x="30.0" y="585.0" width="2050.0" height="385.0" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_start" bpmnElement="access_start"> +      <ns2:BPMNShape id="access_DI_start" bpmnElement="access_start"> 
-        <dc:Bounds x="132.0" y="92.0" width="36" height="36" /> +        <ns3:Bounds x="132.0" y="92.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_status" bpmnElement="access_status"> +      <ns2:BPMNShape id="access_DI_status" bpmnElement="access_status"> 
-        <dc:Bounds x="325.0" y="85.0" width="50" height="50" /> +        <ns3:Bounds x="325.0" y="85.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_assigned" bpmnElement="access_assigned"> +      <ns2:BPMNShape id="access_DI_assigned" bpmnElement="access_assigned"> 
-        <dc:Bounds x="555.0" y="85.0" width="50" height="50" /> +        <ns3:Bounds x="555.0" y="85.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_auto" bpmnElement="access_auto"> +      <ns2:BPMNShape id="access_DI_auto" bpmnElement="access_auto"> 
-        <dc:Bounds x="805.0" y="85.0" width="50" height="50" /> +        <ns3:Bounds x="805.0" y="85.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_notify" bpmnElement="access_notify"> +      <ns2:BPMNShape id="access_DI_notify" bpmnElement="access_notify"> 
-        <dc:Bounds x="1005.0" y="75.0" width="150" height="70" /> +        <ns3:Bounds x="1005.0" y="75.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_defer" bpmnElement="access_defer"> +      <ns2:BPMNShape id="access_DI_defer" bpmnElement="access_defer"> 
-        <dc:Bounds x="1265.0" y="75.0" width="150" height="70" /> +        <ns3:Bounds x="1265.0" y="75.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_cleanup" bpmnElement="access_cleanup"> +      <ns2:BPMNShape id="access_DI_cleanup" bpmnElement="access_cleanup"> 
-        <dc:Bounds x="275.0" y="265.0" width="150" height="70" /> +        <ns3:Bounds x="275.0" y="265.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_end" bpmnElement="access_end"> +      <ns2:BPMNShape id="access_DI_end" bpmnElement="access_end"> 
-        <dc:Bounds x="562.0" y="282.0" width="36" height="36" /> +        <ns3:Bounds x="562.0" y="282.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_transition" bpmnElement="access_transition"> +      <ns2:BPMNShape id="access_DI_transition" bpmnElement="access_transition"> 
-        <dc:Bounds x="755.0" y="265.0" width="150" height="70" /> +        <ns3:Bounds x="755.0" y="265.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_confirmed" bpmnElement="access_confirmed"> +      <ns2:BPMNShape id="access_DI_confirmed" bpmnElement="access_confirmed"> 
-        <dc:Bounds x="1055.0" y="275.0" width="50" height="50" /> +        <ns3:Bounds x="1055.0" y="275.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_handoff" bpmnElement="access_handoff"> +      <ns2:BPMNShape id="access_DI_handoff" bpmnElement="access_handoff"> 
-        <dc:Bounds x="1265.0" y="265.0" width="150" height="70" /> +        <ns3:Bounds x="1265.0" y="265.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_remove" bpmnElement="access_remove"> +      <ns2:BPMNShape id="access_DI_remove" bpmnElement="access_remove"> 
-        <dc:Bounds x="1525.0" y="265.0" width="150" height="70" /> +        <ns3:Bounds x="1525.0" y="265.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_accepted" bpmnElement="access_accepted"> +      <ns2:BPMNShape id="access_DI_accepted" bpmnElement="access_accepted"> 
-        <dc:Bounds x="1832.0" y="282.0" width="36" height="36" /> +        <ns3:Bounds x="1832.0" y="282.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_missing" bpmnElement="access_missing"> +      <ns2:BPMNShape id="access_DI_missing" bpmnElement="access_missing"> 
-        <dc:Bounds x="1062.0" y="462.0" width="36" height="36" /> +        <ns3:Bounds x="1062.0" y="462.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_notify_error" bpmnElement="access_notify_error"> +      <ns2:BPMNShape id="access_DI_notify_error" bpmnElement="access_notify_error"> 
-        <dc:Bounds x="1112.0" y="127.0" width="36" height="36" /> +        <ns3:Bounds x="1112.0" y="127.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_api_error" bpmnElement="access_api_error"> +      <ns2:BPMNShape id="access_DI_api_error" bpmnElement="access_api_error"> 
-        <dc:Bounds x="862.0" y="317.0" width="36" height="36" /> +        <ns3:Bounds x="862.0" y="317.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_send_error" bpmnElement="access_send_error"> +      <ns2:BPMNShape id="access_DI_send_error" bpmnElement="access_send_error"> 
-        <dc:Bounds x="1372.0" y="317.0" width="36" height="36" /> +        <ns3:Bounds x="1372.0" y="317.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_retry" bpmnElement="access_retry"> +      <ns2:BPMNShape id="access_DI_retry" bpmnElement="access_retry"> 
-        <dc:Bounds x="1525.0" y="465.0" width="150" height="70" /> +        <ns3:Bounds x="1525.0" y="465.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_wait" bpmnElement="access_wait"> +      <ns2:BPMNShape id="access_DI_wait" bpmnElement="access_wait"> 
-        <dc:Bounds x="1055.0" y="715.0" width="50" height="50" /> +        <ns3:Bounds x="1055.0" y="715.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_timer" bpmnElement="access_timer"> +      <ns2:BPMNShape id="access_DI_timer" bpmnElement="access_timer"> 
-        <dc:Bounds x="1322.0" y="652.0" width="36" height="36" /> +        <ns3:Bounds x="1322.0" y="652.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_revision" bpmnElement="access_revision"> +      <ns2:BPMNShape id="access_DI_revision" bpmnElement="access_revision"> 
-        <dc:Bounds x="1322.0" y="852.0" width="36" height="36" /> +        <ns3:Bounds x="1322.0" y="852.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="access_DI_ready" bpmnElement="access_ready"> +      <ns2:BPMNShape id="access_DI_ready" bpmnElement="access_ready"> 
-        <dc:Bounds x="1525.0" y="705.0" width="150" height="70" /> +        <ns3:Bounds x="1525.0" y="705.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_0" bpmnElement="access_Flow_0"> +      <ns2:BPMNEdge id="access_DI_Flow_0" bpmnElement="access_Flow_0"> 
-        <di:waypoint x="168.0" y="110.0" /> +        <ns4:waypoint x="168.0" y="110.0" /> 
-        <di:waypoint x="325.0" y="110.0" /> +        <ns4:waypoint x="325.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_1" bpmnElement="access_Flow_1"> +      <ns2:BPMNEdge id="access_DI_Flow_1" bpmnElement="access_Flow_1"> 
-        <di:waypoint x="375.0" y="110.0" /> +        <ns4:waypoint x="375.0" y="110.0" /> 
-        <di:waypoint x="555.0" y="110.0" /> +        <ns4:waypoint x="555.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_2" bpmnElement="access_Flow_2"> +      <ns2:BPMNEdge id="access_DI_Flow_2" bpmnElement="access_Flow_2"> 
-        <di:waypoint x="350.0" y="135.0" /> +        <ns4:waypoint x="350.0" y="135.0" /> 
-        <di:waypoint x="350.0" y="265.0" /> +        <ns4:waypoint x="350.0" y="265.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_3" bpmnElement="access_Flow_3"> +      <ns2:BPMNEdge id="access_DI_Flow_3" bpmnElement="access_Flow_3"> 
-        <di:waypoint x="605.0" y="110.0" /> +        <ns4:waypoint x="605.0" y="110.0" /> 
-        <di:waypoint x="805.0" y="110.0" /> +        <ns4:waypoint x="805.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_4" bpmnElement="access_Flow_4"> +      <ns2:BPMNEdge id="access_DI_Flow_4" bpmnElement="access_Flow_4"> 
-        <di:waypoint x="605.0" y="110.0" /> +        <ns4:waypoint x="605.0" y="110.0" /> 
-        <di:waypoint x="690.0" y="110.0" /> +        <ns4:waypoint x="690.0" y="110.0" /> 
-        <di:waypoint x="690.0" y="235.0" /> +        <ns4:waypoint x="690.0" y="235.0" /> 
-        <di:waypoint x="350.0" y="235.0" /> +        <ns4:waypoint x="350.0" y="235.0" /> 
-        <di:waypoint x="350.0" y="265.0" /> +        <ns4:waypoint x="350.0" y="265.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_5" bpmnElement="access_Flow_5"> +      <ns2:BPMNEdge id="access_DI_Flow_5" bpmnElement="access_Flow_5"> 
-        <di:waypoint x="425.0" y="300.0" /> +        <ns4:waypoint x="425.0" y="300.0" /> 
-        <di:waypoint x="562.0" y="300.0" /> +        <ns4:waypoint x="562.0" y="300.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_6" bpmnElement="access_Flow_6"> +      <ns2:BPMNEdge id="access_DI_Flow_6" bpmnElement="access_Flow_6"> 
-        <di:waypoint x="855.0" y="110.0" /> +        <ns4:waypoint x="855.0" y="110.0" /> 
-        <di:waypoint x="1005.0" y="110.0" /> +        <ns4:waypoint x="1005.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_7" bpmnElement="access_Flow_7"> +      <ns2:BPMNEdge id="access_DI_Flow_7" bpmnElement="access_Flow_7"> 
-        <di:waypoint x="1155.0" y="110.0" /> +        <ns4:waypoint x="1155.0" y="110.0" /> 
-        <di:waypoint x="1265.0" y="110.0" /> +        <ns4:waypoint x="1265.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_8" bpmnElement="access_Flow_8"> +      <ns2:BPMNEdge id="access_DI_Flow_8" bpmnElement="access_Flow_8"> 
-        <di:waypoint x="1415.0" y="110.0" /> +        <ns4:waypoint x="1415.0" y="110.0" /> 
-        <di:waypoint x="1470.0" y="110.0" /> +        <ns4:waypoint x="1470.0" y="110.0" /> 
-        <di:waypoint x="1470.0" y="600.0" /> +        <ns4:waypoint x="1470.0" y="600.0" /> 
-        <di:waypoint x="1080.0" y="600.0" /> +        <ns4:waypoint x="1080.0" y="600.0" /> 
-        <di:waypoint x="1080.0" y="715.0" /> +        <ns4:waypoint x="1080.0" y="715.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_9" bpmnElement="access_Flow_9"> +      <ns2:BPMNEdge id="access_DI_Flow_9" bpmnElement="access_Flow_9"> 
-        <di:waypoint x="830.0" y="135.0" /> +        <ns4:waypoint x="830.0" y="135.0" /> 
-        <di:waypoint x="830.0" y="265.0" /> +        <ns4:waypoint x="830.0" y="265.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_10" bpmnElement="access_Flow_10"> +      <ns2:BPMNEdge id="access_DI_Flow_10" bpmnElement="access_Flow_10"> 
-        <di:waypoint x="905.0" y="300.0" /> +        <ns4:waypoint x="905.0" y="300.0" /> 
-        <di:waypoint x="1055.0" y="300.0" /> +        <ns4:waypoint x="1055.0" y="300.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_11" bpmnElement="access_Flow_11"> +      <ns2:BPMNEdge id="access_DI_Flow_11" bpmnElement="access_Flow_11"> 
-        <di:waypoint x="1080.0" y="325.0" /> +        <ns4:waypoint x="1080.0" y="325.0" /> 
-        <di:waypoint x="1080.0" y="462.0" /> +        <ns4:waypoint x="1080.0" y="462.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_12" bpmnElement="access_Flow_12"> +      <ns2:BPMNEdge id="access_DI_Flow_12" bpmnElement="access_Flow_12"> 
-        <di:waypoint x="1105.0" y="300.0" /> +        <ns4:waypoint x="1105.0" y="300.0" /> 
-        <di:waypoint x="1265.0" y="300.0" /> +        <ns4:waypoint x="1265.0" y="300.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_13" bpmnElement="access_Flow_13"> +      <ns2:BPMNEdge id="access_DI_Flow_13" bpmnElement="access_Flow_13"> 
-        <di:waypoint x="1415.0" y="300.0" /> +        <ns4:waypoint x="1415.0" y="300.0" /> 
-        <di:waypoint x="1525.0" y="300.0" /> +        <ns4:waypoint x="1525.0" y="300.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_14" bpmnElement="access_Flow_14"> +      <ns2:BPMNEdge id="access_DI_Flow_14" bpmnElement="access_Flow_14"> 
-        <di:waypoint x="1675.0" y="300.0" /> +        <ns4:waypoint x="1675.0" y="300.0" /> 
-        <di:waypoint x="1832.0" y="300.0" /> +        <ns4:waypoint x="1832.0" y="300.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_15" bpmnElement="access_Flow_15"> +      <ns2:BPMNEdge id="access_DI_Flow_15" bpmnElement="access_Flow_15"> 
-        <di:waypoint x="1148.0" y="145.0" /> +        <ns4:waypoint x="1148.0" y="145.0" /> 
-        <di:waypoint x="1190.0" y="145.0" /> +        <ns4:waypoint x="1190.0" y="145.0" /> 
-        <di:waypoint x="1520.0" y="145.0" /> +        <ns4:waypoint x="1520.0" y="145.0" /> 
-        <di:waypoint x="1520.0" y="435.0" /> +        <ns4:waypoint x="1520.0" y="435.0" /> 
-        <di:waypoint x="1600.0" y="435.0" /> +        <ns4:waypoint x="1600.0" y="435.0" /> 
-        <di:waypoint x="1600.0" y="465.0" /> +        <ns4:waypoint x="1600.0" y="465.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_16" bpmnElement="access_Flow_16"> +      <ns2:BPMNEdge id="access_DI_Flow_16" bpmnElement="access_Flow_16"> 
-        <di:waypoint x="898.0" y="335.0" /> +        <ns4:waypoint x="898.0" y="335.0" /> 
-        <di:waypoint x="940.0" y="335.0" /> +        <ns4:waypoint x="940.0" y="335.0" /> 
-        <di:waypoint x="940.0" y="415.0" /> +        <ns4:waypoint x="940.0" y="415.0" /> 
-        <di:waypoint x="1600.0" y="415.0" /> +        <ns4:waypoint x="1600.0" y="415.0" /> 
-        <di:waypoint x="1600.0" y="465.0" /> +        <ns4:waypoint x="1600.0" y="465.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_17" bpmnElement="access_Flow_17"> +      <ns2:BPMNEdge id="access_DI_Flow_17" bpmnElement="access_Flow_17"> 
-        <di:waypoint x="1408.0" y="335.0" /> +        <ns4:waypoint x="1408.0" y="335.0" /> 
-        <di:waypoint x="1450.0" y="335.0" /> +        <ns4:waypoint x="1450.0" y="335.0" /> 
-        <di:waypoint x="1600.0" y="335.0" /> +        <ns4:waypoint x="1600.0" y="335.0" /> 
-        <di:waypoint x="1600.0" y="465.0" /> +        <ns4:waypoint x="1600.0" y="465.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_18" bpmnElement="access_Flow_18"> +      <ns2:BPMNEdge id="access_DI_Flow_18" bpmnElement="access_Flow_18"> 
-        <di:waypoint x="1675.0" y="500.0" /> +        <ns4:waypoint x="1675.0" y="500.0" /> 
-        <di:waypoint x="1720.0" y="500.0" /> +        <ns4:waypoint x="1720.0" y="500.0" /> 
-        <di:waypoint x="1720.0" y="615.0" /> +        <ns4:waypoint x="1720.0" y="615.0" /> 
-        <di:waypoint x="1080.0" y="615.0" /> +        <ns4:waypoint x="1080.0" y="615.0" /> 
-        <di:waypoint x="1080.0" y="715.0" /> +        <ns4:waypoint x="1080.0" y="715.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_19" bpmnElement="access_Flow_19"> +      <ns2:BPMNEdge id="access_DI_Flow_19" bpmnElement="access_Flow_19"> 
-        <di:waypoint x="1105.0" y="740.0" /> +        <ns4:waypoint x="1105.0" y="740.0" /> 
-        <di:waypoint x="1213.5" y="740.0" /> +        <ns4:waypoint x="1213.5" y="740.0" /> 
-        <di:waypoint x="1213.5" y="670.0" /> +        <ns4:waypoint x="1213.5" y="670.0" /> 
-        <di:waypoint x="1322.0" y="670.0" /> +        <ns4:waypoint x="1322.0" y="670.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_20" bpmnElement="access_Flow_20"> +      <ns2:BPMNEdge id="access_DI_Flow_20" bpmnElement="access_Flow_20"> 
-        <di:waypoint x="1105.0" y="740.0" /> +        <ns4:waypoint x="1105.0" y="740.0" /> 
-        <di:waypoint x="1213.5" y="740.0" /> +        <ns4:waypoint x="1213.5" y="740.0" /> 
-        <di:waypoint x="1213.5" y="870.0" /> +        <ns4:waypoint x="1213.5" y="870.0" /> 
-        <di:waypoint x="1322.0" y="870.0" /> +        <ns4:waypoint x="1322.0" y="870.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_21" bpmnElement="access_Flow_21"> +      <ns2:BPMNEdge id="access_DI_Flow_21" bpmnElement="access_Flow_21"> 
-        <di:waypoint x="1358.0" y="670.0" /> +        <ns4:waypoint x="1358.0" y="670.0" /> 
-        <di:waypoint x="1441.5" y="670.0" /> +        <ns4:waypoint x="1441.5" y="670.0" /> 
-        <di:waypoint x="1441.5" y="740.0" /> +        <ns4:waypoint x="1441.5" y="740.0" /> 
-        <di:waypoint x="1525.0" y="740.0" /> +        <ns4:waypoint x="1525.0" y="740.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_22" bpmnElement="access_Flow_22"> +      <ns2:BPMNEdge id="access_DI_Flow_22" bpmnElement="access_Flow_22"> 
-        <di:waypoint x="1358.0" y="870.0" /> +        <ns4:waypoint x="1358.0" y="870.0" /> 
-        <di:waypoint x="1441.5" y="870.0" /> +        <ns4:waypoint x="1441.5" y="870.0" /> 
-        <di:waypoint x="1441.5" y="740.0" /> +        <ns4:waypoint x="1441.5" y="740.0" /> 
-        <di:waypoint x="1525.0" y="740.0" /> +        <ns4:waypoint x="1525.0" y="740.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="access_DI_Flow_23" bpmnElement="access_Flow_23"> +      <ns2:BPMNEdge id="access_DI_Flow_23" bpmnElement="access_Flow_23"> 
-        <di:waypoint x="1675.0" y="740.0" /> +        <ns4:waypoint x="1675.0" y="740.0" /> 
-        <di:waypoint x="2040.0" y="740.0" /> +        <ns4:waypoint x="2040.0" y="740.0" /> 
-        <di:waypoint x="2040.0" y="25.0" /> +        <ns4:waypoint x="2040.0" y="25.0" /> 
-        <di:waypoint x="350.0" y="25.0" /> +        <ns4:waypoint x="350.0" y="25.0" /> 
-        <di:waypoint x="350.0" y="85.0" /> +        <ns4:waypoint x="350.0" y="85.0" /> 
-        <bpmndi:BPMNLabel> +        <ns2:BPMNLabel> 
-          <dc:Bounds x="1750.0" y="5.0" width="180" height="26" /> +          <ns3:Bounds x="1750.0" y="5.0" width="180" height="26" /> 
-        </bpmndi:BPMNLabel> +        </ns2:BPMNLabel> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-    </bpmndi:BPMNPlane> +    </ns2:BPMNPlane> 
-  </bpmndi:BPMNDiagram>+  </ns2:BPMNDiagram>
 </bpmn:definitions> </bpmn:definitions>
 </sharix-bpmn> </sharix-bpmn>
Строка 552: Строка 659:
   * Неназначенный Ticket, autoaccept включён — запросить ''ACCEPTED'' через scoped Ticket API, явно передать в ''open_access_request_accepted'' и убрать текущий Ticket с сохранением комнаты после успешной передачи.   * Неназначенный Ticket, autoaccept включён — запросить ''ACCEPTED'' через scoped Ticket API, явно передать в ''open_access_request_accepted'' и убрать текущий Ticket с сохранением комнаты после успешной передачи.
  
-404 перехода означает устаревший scope и запрашивает локальную очистку. Иная ошибка API/отправки попадает в общий ''processing_error'' и defer по ''DEFERRED_TICKET_RECHECK_SECONDS''. Уже committed ACCEPTED не откатывается из-за ошибки прямой XMPP-передачи: backend wakeup и periodic reconciliation позволяют следующему владельцу получить сохранённое состояние.+Различать ответы перехода и последующие ошибки: 
 + 
 +  * **404 scoped transition:** Ticket вышел из доступного контекста, запрашивается локальная очистка. 
 +  * **Ошибка API либо уведомления:** общий processing_error и DEFERRED_TICKET_RECHECK_SECONDS. 
 +  * **ACCEPTED сохранён, прямая XMPP-передача не удалась:** сохранённое решение не откатывается; wakeup и periodic reconciliation позволяют следующему владельцу восстановить очередь.
  
 ===== Ручное решение и внешние участники (BPMN) ===== ===== Ручное решение и внешние участники (BPMN) =====
Строка 790: Строка 901:
 </sharix-bpmn> </sharix-bpmn>
  
-В текущем lifecycle из ''PENDING'' разрешены ''ACCEPTED'', ''DECLINED'' или ''CLOSED''. Основное решение о доступе — принятие либо отказ; закрытие без перехода в профильный handler не является подтверждением активации права. Схема показывает рассмотрение и эти два профильных исхода. Чтение Ticket и право менять его статус проверяются отдельно; авторство само по себе не даёт права принять собственный запрос.+Текущий 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 после завершения прохода. Уведомление или ответ текстом в XMPP-комнате не являются реализованным действием смены статуса в этом handler. Пользователь выполняет решение через разрешённую карточку/API; backend проверяет права и lifecycle, сохраняет статус и Event, после commit отправляет ''ticket.changed'' новому владельцу и ''ticket.moved'' прежнему. Ошибка доставки не отменяет сохранённое решение. Прежний in-flight worker учитывает pending discard после завершения прохода.
Строка 797: Строка 913:
  
 ===== Как устроено уведомление в этой реализации ===== ===== Как устроено уведомление в этой реализации =====
-''notify_admins'' здесь использует комнату ''ticket_<id>_type_3'' через ejabberd API. Участники формируются из активных пользователей группы ''METASERVICE-ADMIN'', имеющих XMPP-реквизиты, JID текущего bot и report JID; повторы убираются. Локальный helper использует Django-контекст для поиска участников.+notify_admins отправляет сообщение в комнату ticket_<id>_type_3 через ejabberd API. Состав комнаты: 
 + 
 +  * активные пользователи METASERVICE-ADMIN с XMPP-реквизитами; 
 +  * JID текущего bot; 
 +  * report JID. 
 + 
 +Повторяющиеся JID исключаются. Этот локальный helper получает пользователей через Django-контекст.
  
 Поле ''decision_maker_group'' входит в текст уведомления, но в этом пути не является фильтром участников комнаты. Это отличается от адресного reviewer API профильных ST_REQUEST-проверок: нельзя автоматически переносить его правила получателей на данный handler. Участие в комнате не выдаёт права на Ticket. Поле ''decision_maker_group'' входит в текст уведомления, но в этом пути не является фильтром участников комнаты. Это отличается от адресного reviewer API профильных ST_REQUEST-проверок: нельзя автоматически переносить его правила получателей на данный handler. Участие в комнате не выдаёт права на Ticket.
Строка 803: Строка 925:
 Helper пытается создать members-only комнату, добавить/подписать/пригласить участников. Часть ошибок подготовки ловится и логируется, затем комната попадает в локальный cache; это не доказательство успешной доставки всем участникам. Само сообщение отправляется отдельно. В этом пути нет durable ack ключа, как у verification notifications: при повторных проходах ручной ветви сообщение может отправляться снова. Уведомление не гарантирует прочтение человеком. Helper пытается создать members-only комнату, добавить/подписать/пригласить участников. Часть ошибок подготовки ловится и логируется, затем комната попадает в локальный cache; это не доказательство успешной доставки всем участникам. Само сообщение отправляется отдельно. В этом пути нет durable ack ключа, как у verification notifications: при повторных проходах ручной ветви сообщение может отправляться снова. Уведомление не гарантирует прочтение человеком.
  
-Формирование сообщения использует ''AccessRequestTicket'' из JSON payload: в нём должны присутствовать обязательные реквизиты, включая ''requested_role''. Пустой или несовместимый JSON не превращается в корректную заявку и может привести к общему retry до исправления данных. Промокод и комментарий существуют в payload, но этот handler не валидирует промокод и не использует его как основание автоматической выдачи права.+Сообщение формируется из AccessRequestTicket и JSON payload: 
 + 
 +  * requested_role — обязательный реквизит конструктора; 
 +  * decision_maker_group — реквизит текста, а не фильтр участников этой комнаты; 
 +  * promocode и comment могут присутствовать, но промокод здесь не валидируется и не даёт основания для автоматического права. 
 + 
 +Несовместимый или пустой JSON может приводить к общему retry; сам повтор не исправляет структуру заявки.
  
 ===== Таймеры и восстановление ===== ===== Таймеры и восстановление =====
Строка 814: Строка 942:
  
 ===== Что проверить при отсутствии движения ===== ===== Что проверить при отсутствии движения =====
-Различайте назначение ''assigned_to'', решение PENDING→ACCEPTED/DECLINED и фактическую активацию permission. Проверьте выбранный Python/workspace, ''ACCREQ_AUTOACCEPT'', JSON заявки, состав и доступность MUC-комнаты, права рассматривающего, scoped Ticket API и доставку commit-событий. Если Ticket уже ACCEPTED, диагностику требований и права продолжайте в следующей стадии, а не повторным принятием запроса.+Порядок диагностики: 
 + 
 +  - Прочитать статус и assigned_to: назначение пользователя не равно решению. 
 +  - Для PENDING сверить выбранную версию, ACCREQ_AUTOACCEPT и корректность JSON. 
 +  - В ручном режиме проверить подготовку MUC-комнаты, сообщение и участников. 
 +  - Проверить права рассматривающего, scoped transition API и доставку commit-событий. 
 +  - Если Ticket уже ACCEPTED, продолжить проверку требований и активации в следующем сценарии. 
 + 
 +Не следует повторно принимать запрос только потому, что право ещё не стало active.
  
 ===== Проверенные источники ===== ===== Проверенные источники =====
sharixopen/knowledge/scenarios/access_request_pending.1793216194.txt.gz · Последнее изменение: — sx_knowledge_api_open

© 2022 ShariX