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

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


sharixopen:knowledge:scenarios:service_request_template

Различия

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

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

Следующая версия
Предыдущая версия
sharixopen:knowledge:scenarios:service_request_template [2026/10/28 20:18] – [sharixknowledge] approved package sx_knowledge_api_opensharixopen:knowledge:scenarios:service_request_template [2026/10/31 11:25] (текущий) – [sharixknowledge] approved package sx_knowledge_api_open
Строка 19: Строка 19:
             "domain": "business_processes",             "domain": "business_processes",
             "lifecycle": "implemented",             "lifecycle": "implemented",
-            "component": "handlers",+            "component": "handlers_examples, handlers_backend, dbsynce",
             "parents": [             "parents": [
                 "ShariXKnowledgeScenarios"                 "ShariXKnowledgeScenarios"
             ],             ],
             "terms": [             "terms": [
-                "SERVICE_REQUEST", +                "audience_developer", 
-                "TEMPLATE", +                "audience_support", 
-                "order intents", +                "audience_reviewer", 
-                "BPMN"+                "audience_ai", 
 +                "product_sharix_open", 
 +                "material_scenario", 
 +                "topic_orders_creation", 
 +                "topic_orders_lifecycle", 
 +                "topic_handlers_runtime", 
 +                "service_request", 
 +                "ticket_template", 
 +                "order_intent", 
 +                "bpmn", 
 +                "ticket", 
 +                "blockly", 
 +                "generated_python", 
 +                "order"
             ]             ]
         },         },
Строка 168: Строка 181:
                 "reminder": "55917fca0681150fc82e720a385f2bce7e546bf919351a0b550eed39c2218890"                 "reminder": "55917fca0681150fc82e720a385f2bce7e546bf919351a0b550eed39c2218890"
             }             }
 +        },
 +        "diagram_view_bounds": {
 +            "reviewed_on": "2026-10-29",
 +            "models": [
 +                "logic",
 +                "external"
 +            ],
 +            "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/creation",
 +                "orders/lifecycle",
 +                "handlers/runtime"
 +            ],
 +            "tag_terms": [
 +                "audience_developer",
 +                "audience_support",
 +                "audience_reviewer",
 +                "audience_ai",
 +                "product_sharix_open",
 +                "material_scenario",
 +                "topic_orders_creation",
 +                "topic_orders_lifecycle",
 +                "topic_handlers_runtime",
 +                "service_request",
 +                "ticket_template",
 +                "order_intent",
 +                "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": "5064e46705f6afebff987f69b469620d1165a0fbb2dab85a1c75260e209315c2",+    "content_sha256": "9a3f290907a8bc2d7f8acc45be47dd0f9694ad3218e2de6f986792e0f181df8d",
     "schema": 1     "schema": 1
 } }
Строка 177: Строка 251:
 ~~NOCACHE~~ ~~NOCACHE~~
  
-**Область:** ShariX Open. **Обработчик:** ''open_service_request_template'', тип ''SERVICE_REQUEST'' (2), рабочий статус ''TEMPLATE'' (210). Опубликованный 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#podderzhka|Поддержка]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]]. 
 + 
 +**Темы:** [[sharixopen:knowledge:classification:topics#sozdanie_i_chernovik|Заказы → Создание и черновик]] · [[sharixopen:knowledge:classification:topics#zhiznennyj_cikl|Заказы → Жизненный цикл]] · [[sharixopen:knowledge:classification:topics#runtime|Обработчики → Runtime]]. 
 + 
 + 
 + 
 +**Область:** ShariX Open. **Обработчик:** ''open_service_request_template'', тип ''SERVICE_REQUEST'' (2), рабочий статус ''TEMPLATE'' (210). 31.10.2026 опубликованные исходники повторно получены из Git. Обе Python-копии заново сопоставлены с результатом генерации Blockly; проверены 11 исходников генераторов. Сам handler не исполнялся. Выбранную версию, конфигурацию и внешние подключения сервера проверяют отдельно.
  
 ===== Назначение и границы ===== ===== Назначение и границы =====
-Handler сопровождает уже существующий черновик заказа: принимает подходящее пользовательское намерение, проверяет срок автоматического закрытия, напоминает автору о размещении и освобождает worker до следующего прохода. Он не создаёт заказ и не выбирает исполнителя в фоне только из-за наличия черновика.+Handler сопровождает существующий черновик: 
 + 
 +  * принимает допустимое пользовательское намерение; 
 +  * проверяет срок автоматического закрытия; 
 +  * при необходимости напоминает автору о размещении; 
 +  * освобождает worker до следующего прохода. 
 + 
 +Новый заказ здесь не создаётся. Наличие черновика само по себе не запускает фоновый выбор исполнителя. 
 + 
 +Приоритет действий в TEMPLATE: 
 + 
 +  - Сначала обработать разрешённый book/cancel. 
 +  - При успешном действии или stale scope завершить проход. 
 +  - Если intent отсутствует или каноническое действие отклонено — продолжить проверку черновика. 
 +  - Только затем проверить срок автоматического закрытия.
  
-Пользовательское ''book''/''cancel'' обрабатывается **до** проверки срока закрытия. Успешное действие либо устаревший scope завершают этот проход. Если intent не найден или каноническое пользовательское действие отклонено, текущий проход продолжает обычную проверку черновика. Очерёдность важна: дата закрытия не является предварительным фильтром перед всеми пользовательскими намерениями этой стадии.+Дата закрытия не является предварительным фильтром перед всеми пользовательскими намерениями.
  
 SERVICE_REQUEST не должен менять бизнес-состояние через универсальный ''ticket.transition'': каталог TEMPLATE объявляет узкие ''order.context'', ''order.apply_user_intent'', ''order.close_template'' и необходимые read/notification возможности. Backend order actions проверяют актуальный заказ и его lifecycle. SERVICE_REQUEST не должен менять бизнес-состояние через универсальный ''ticket.transition'': каталог TEMPLATE объявляет узкие ''order.context'', ''order.apply_user_intent'', ''order.close_template'' и необходимые read/notification возможности. Backend order actions проверяют актуальный заказ и его lifecycle.
Строка 191: Строка 287:
 <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_service_template_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_service_template_logic" targetNamespace="urn:sharix:knowledge:handlers">
   <bpmn:process id="template_Process_template" name="open_service_request_template: пользовательский intent, срок закрытия, напоминание" isExecutable="false">   <bpmn:process id="template_Process_template" name="open_service_request_template: пользовательский intent, срок закрытия, напоминание" isExecutable="false">
     <bpmn:documentation>{"notes": ["Git built-in; BPMN isExecutable=false. Handler при генерации не исполняется.", "Дата закрытия считается runtime: planned_start + SERVICE_REQUEST_TEMPLATE_CLOSE_AFTER_START_SECONDS.", "Intent-очередь, дедупликация и reminder counters — в памяти, не durable delivery guarantee."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_template.py", "repository": "sharix-open-handlers-examples", "sha256": "a5e86f4580c8add4b05c6e58fa33306f5b4a2419d0951523afb996bff6e9e51b"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_template.json", "repository": "sharix-open-handlers-examples", "sha256": "6fb731e413f8fb8709e0b1e578a1da883c1d5a46ce291675114b32ec52619925"}, {"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"}]}</bpmn:documentation>     <bpmn:documentation>{"notes": ["Git built-in; BPMN isExecutable=false. Handler при генерации не исполняется.", "Дата закрытия считается runtime: planned_start + SERVICE_REQUEST_TEMPLATE_CLOSE_AFTER_START_SECONDS.", "Intent-очередь, дедупликация и reminder counters — в памяти, не durable delivery guarantee."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_template.py", "repository": "sharix-open-handlers-examples", "sha256": "a5e86f4580c8add4b05c6e58fa33306f5b4a2419d0951523afb996bff6e9e51b"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_template.json", "repository": "sharix-open-handlers-examples", "sha256": "6fb731e413f8fb8709e0b1e578a1da883c1d5a46ce291675114b32ec52619925"}, {"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"}]}</bpmn:documentation>
Строка 366: Строка 462:
     <bpmn:participant id="template_Pool_template" name="open_service_request_template: пользовательский intent, срок закрытия, напоминание" processRef="template_Process_template" />     <bpmn:participant id="template_Pool_template" name="open_service_request_template: пользовательский intent, срок закрытия, напоминание" processRef="template_Process_template" />
   </bpmn:collaboration>   </bpmn:collaboration>
-  <bpmndi:BPMNDiagram id="Diagram_service_template_logic"> +  <ns2:BPMNDiagram id="Diagram_service_template_logic"> 
-    <bpmndi:BPMNPlane id="Plane_service_template_logic" bpmnElement="Collaboration_service_template_logic"> +    <ns2:BPMNPlane id="Plane_service_template_logic" bpmnElement="Collaboration_service_template_logic"> 
-      <bpmndi:BPMNShape id="template_DI_Pool_template" bpmnElement="template_Pool_template" isHorizontal="true"> +      <ns2:BPMNShape id="template_DI_Pool_template" bpmnElement="template_Pool_template" isHorizontal="true"> 
-        <dc:Bounds x="0.0" y="0.0" width="2310" height="1030" /> +        <ns3:Bounds x="0.0" y="0.0" width="2450.0" height="1030.0" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_Lane_worker" bpmnElement="template_Lane_worker" isHorizontal="true"> +      <ns2:BPMNShape id="template_DI_Lane_worker" bpmnElement="template_Lane_worker" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="0.0" width="2280" height="637.5" /> +        <ns3:Bounds x="30.0" y="0.0" width="2420.0" height="637.5" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_Lane_queue" bpmnElement="template_Lane_queue" isHorizontal="true"> +      <ns2:BPMNShape id="template_DI_Lane_queue" bpmnElement="template_Lane_queue" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="637.5" width="2280" height="392.5" /> +        <ns3:Bounds x="30.0" y="637.5" width="2420.0" height="392.5" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_start" bpmnElement="template_start"> +      <ns2:BPMNShape id="template_DI_start" bpmnElement="template_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="template_DI_status" bpmnElement="template_status"> +      <ns2:BPMNShape id="template_DI_status" bpmnElement="template_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="template_DI_intent" bpmnElement="template_intent"> +      <ns2:BPMNShape id="template_DI_intent" bpmnElement="template_intent"> 
-        <dc:Bounds x="515.0" y="75.0" width="150" height="70" /> +        <ns3:Bounds x="515.0" y="75.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_handled" bpmnElement="template_handled"> +      <ns2:BPMNShape id="template_DI_handled" bpmnElement="template_handled"> 
-        <dc:Bounds x="825.0" y="85.0" width="50" height="50" /> +        <ns3:Bounds x="825.0" y="85.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_intent_end" bpmnElement="template_intent_end"> +      <ns2:BPMNShape id="template_DI_intent_end" bpmnElement="template_intent_end"> 
-        <dc:Bounds x="1092.0" y="92.0" width="36" height="36" /> +        <ns3:Bounds x="1092.0" y="92.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_stale" bpmnElement="template_stale"> +      <ns2:BPMNShape id="template_DI_stale" bpmnElement="template_stale"> 
-        <dc:Bounds x="275.0" y="275.0" width="150" height="70" /> +        <ns3:Bounds x="275.0" y="275.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_stale_end" bpmnElement="template_stale_end"> +      <ns2:BPMNShape id="template_DI_stale_end" bpmnElement="template_stale_end"> 
-        <dc:Bounds x="572.0" y="292.0" width="36" height="36" /> +        <ns3:Bounds x="572.0" y="292.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_context" bpmnElement="template_context"> +      <ns2:BPMNShape id="template_DI_context" bpmnElement="template_context"> 
-        <dc:Bounds x="775.0" y="275.0" width="150" height="70" /> +        <ns3:Bounds x="775.0" y="275.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_found" bpmnElement="template_found"> +      <ns2:BPMNShape id="template_DI_found" bpmnElement="template_found"> 
-        <dc:Bounds x="1085.0" y="285.0" width="50" height="50" /> +        <ns3:Bounds x="1085.0" y="285.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_missing" bpmnElement="template_missing"> +      <ns2:BPMNShape id="template_DI_missing" bpmnElement="template_missing"> 
-        <dc:Bounds x="1092.0" y="492.0" width="36" height="36" /> +        <ns3:Bounds x="1092.0" y="492.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_due" bpmnElement="template_due"> +      <ns2:BPMNShape id="template_DI_due" bpmnElement="template_due"> 
-        <dc:Bounds x="1345.0" y="285.0" width="50" height="50" /> +        <ns3:Bounds x="1345.0" y="285.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_close" bpmnElement="template_close"> +      <ns2:BPMNShape id="template_DI_close" bpmnElement="template_close"> 
-        <dc:Bounds x="1555.0" y="275.0" width="150" height="70" /> +        <ns3:Bounds x="1555.0" y="275.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_close_end" bpmnElement="template_close_end"> +      <ns2:BPMNShape id="template_DI_close_end" bpmnElement="template_close_end"> 
-        <dc:Bounds x="2132.0" y="292.0" width="36" height="36" /> +        <ns3:Bounds x="2132.0" y="292.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_reason" bpmnElement="template_reason"> +      <ns2:BPMNShape id="template_DI_reason" bpmnElement="template_reason"> 
-        <dc:Bounds x="1295.0" y="475.0" width="150" height="70" /> +        <ns3:Bounds x="1295.0" y="475.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_reminder" bpmnElement="template_reminder"> +      <ns2:BPMNShape id="template_DI_reminder" bpmnElement="template_reminder"> 
-        <dc:Bounds x="1555.0" y="475.0" width="150" height="70" /> +        <ns3:Bounds x="1555.0" y="475.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_defer" bpmnElement="template_defer"> +      <ns2:BPMNShape id="template_DI_defer" bpmnElement="template_defer"> 
-        <dc:Bounds x="1815.0" y="475.0" width="150" height="70" /> +        <ns3:Bounds x="1815.0" y="475.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_intent_error" bpmnElement="template_intent_error"> +      <ns2:BPMNShape id="template_DI_intent_error" bpmnElement="template_intent_error"> 
-        <dc:Bounds x="622.0" y="127.0" width="36" height="36" /> +        <ns3:Bounds x="622.0" y="127.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_context_error" bpmnElement="template_context_error"> +      <ns2:BPMNShape id="template_DI_context_error" bpmnElement="template_context_error"> 
-        <dc:Bounds x="882.0" y="327.0" width="36" height="36" /> +        <ns3:Bounds x="882.0" y="327.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_close_error" bpmnElement="template_close_error"> +      <ns2:BPMNShape id="template_DI_close_error" bpmnElement="template_close_error"> 
-        <dc:Bounds x="1662.0" y="327.0" width="36" height="36" /> +        <ns3:Bounds x="1662.0" y="327.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_send_error" bpmnElement="template_send_error"> +      <ns2:BPMNShape id="template_DI_send_error" bpmnElement="template_send_error"> 
-        <dc:Bounds x="1662.0" y="527.0" width="36" height="36" /> +        <ns3:Bounds x="1662.0" y="527.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_retry" bpmnElement="template_retry"> +      <ns2:BPMNShape id="template_DI_retry" bpmnElement="template_retry"> 
-        <dc:Bounds x="2075.0" y="475.0" width="150" height="70" /> +        <ns3:Bounds x="2075.0" y="475.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_wait" bpmnElement="template_wait"> +      <ns2:BPMNShape id="template_DI_wait" bpmnElement="template_wait"> 
-        <dc:Bounds x="1345.0" y="775.0" width="50" height="50" /> +        <ns3:Bounds x="1345.0" y="775.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_timer" bpmnElement="template_timer"> +      <ns2:BPMNShape id="template_DI_timer" bpmnElement="template_timer"> 
-        <dc:Bounds x="1612.0" y="712.0" width="36" height="36" /> +        <ns3:Bounds x="1612.0" y="712.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_event" bpmnElement="template_event"> +      <ns2:BPMNShape id="template_DI_event" bpmnElement="template_event"> 
-        <dc:Bounds x="1612.0" y="912.0" width="36" height="36" /> +        <ns3:Bounds x="1612.0" y="912.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNShape id="template_DI_ready" bpmnElement="template_ready"> +      <ns2:BPMNShape id="template_DI_ready" bpmnElement="template_ready"> 
-        <dc:Bounds x="1815.0" y="765.0" width="150" height="70" /> +        <ns3:Bounds x="1815.0" y="765.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns2:BPMNShape> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_0" bpmnElement="template_Flow_0"> +      <ns2:BPMNEdge id="template_DI_Flow_0" bpmnElement="template_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="template_DI_Flow_1" bpmnElement="template_Flow_1"> +      <ns2:BPMNEdge id="template_DI_Flow_1" bpmnElement="template_Flow_1"> 
-        <di:waypoint x="375.0" y="110.0" /> +        <ns4:waypoint x="375.0" y="110.0" /> 
-        <di:waypoint x="515.0" y="110.0" /> +        <ns4:waypoint x="515.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_2" bpmnElement="template_Flow_2"> +      <ns2:BPMNEdge id="template_DI_Flow_2" bpmnElement="template_Flow_2"> 
-        <di:waypoint x="350.0" y="135.0" /> +        <ns4:waypoint x="350.0" y="135.0" /> 
-        <di:waypoint x="350.0" y="275.0" /> +        <ns4:waypoint x="350.0" y="275.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_3" bpmnElement="template_Flow_3"> +      <ns2:BPMNEdge id="template_DI_Flow_3" bpmnElement="template_Flow_3"> 
-        <di:waypoint x="425.0" y="310.0" /> +        <ns4:waypoint x="425.0" y="310.0" /> 
-        <di:waypoint x="572.0" y="310.0" /> +        <ns4:waypoint x="572.0" y="310.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_4" bpmnElement="template_Flow_4"> +      <ns2:BPMNEdge id="template_DI_Flow_4" bpmnElement="template_Flow_4"> 
-        <di:waypoint x="665.0" y="110.0" /> +        <ns4:waypoint x="665.0" y="110.0" /> 
-        <di:waypoint x="825.0" y="110.0" /> +        <ns4:waypoint x="825.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_5" bpmnElement="template_Flow_5"> +      <ns2:BPMNEdge id="template_DI_Flow_5" bpmnElement="template_Flow_5"> 
-        <di:waypoint x="875.0" y="110.0" /> +        <ns4:waypoint x="875.0" y="110.0" /> 
-        <di:waypoint x="1092.0" y="110.0" /> +        <ns4:waypoint x="1092.0" y="110.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_6" bpmnElement="template_Flow_6"> +      <ns2:BPMNEdge id="template_DI_Flow_6" bpmnElement="template_Flow_6"> 
-        <di:waypoint x="850.0" y="135.0" /> +        <ns4:waypoint x="850.0" y="135.0" /> 
-        <di:waypoint x="850.0" y="275.0" /> +        <ns4:waypoint x="850.0" y="275.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_7" bpmnElement="template_Flow_7"> +      <ns2:BPMNEdge id="template_DI_Flow_7" bpmnElement="template_Flow_7"> 
-        <di:waypoint x="925.0" y="310.0" /> +        <ns4:waypoint x="925.0" y="310.0" /> 
-        <di:waypoint x="1085.0" y="310.0" /> +        <ns4:waypoint x="1085.0" y="310.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_8" bpmnElement="template_Flow_8"> +      <ns2:BPMNEdge id="template_DI_Flow_8" bpmnElement="template_Flow_8"> 
-        <di:waypoint x="1110.0" y="335.0" /> +        <ns4:waypoint x="1110.0" y="335.0" /> 
-        <di:waypoint x="1110.0" y="492.0" /> +        <ns4:waypoint x="1110.0" y="492.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_9" bpmnElement="template_Flow_9"> +      <ns2:BPMNEdge id="template_DI_Flow_9" bpmnElement="template_Flow_9"> 
-        <di:waypoint x="1135.0" y="310.0" /> +        <ns4:waypoint x="1135.0" y="310.0" /> 
-        <di:waypoint x="1345.0" y="310.0" /> +        <ns4:waypoint x="1345.0" y="310.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_10" bpmnElement="template_Flow_10"> +      <ns2:BPMNEdge id="template_DI_Flow_10" bpmnElement="template_Flow_10"> 
-        <di:waypoint x="1395.0" y="310.0" /> +        <ns4:waypoint x="1395.0" y="310.0" /> 
-        <di:waypoint x="1555.0" y="310.0" /> +        <ns4:waypoint x="1555.0" y="310.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_11" bpmnElement="template_Flow_11"> +      <ns2:BPMNEdge id="template_DI_Flow_11" bpmnElement="template_Flow_11"> 
-        <di:waypoint x="1370.0" y="335.0" /> +        <ns4:waypoint x="1370.0" y="335.0" /> 
-        <di:waypoint x="1370.0" y="475.0" /> +        <ns4:waypoint x="1370.0" y="475.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_12" bpmnElement="template_Flow_12"> +      <ns2:BPMNEdge id="template_DI_Flow_12" bpmnElement="template_Flow_12"> 
-        <di:waypoint x="1445.0" y="510.0" /> +        <ns4:waypoint x="1445.0" y="510.0" /> 
-        <di:waypoint x="1555.0" y="510.0" /> +        <ns4:waypoint x="1555.0" y="510.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_13" bpmnElement="template_Flow_13"> +      <ns2:BPMNEdge id="template_DI_Flow_13" bpmnElement="template_Flow_13"> 
-        <di:waypoint x="1705.0" y="510.0" /> +        <ns4:waypoint x="1705.0" y="510.0" /> 
-        <di:waypoint x="1815.0" y="510.0" /> +        <ns4:waypoint x="1815.0" y="510.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_14" bpmnElement="template_Flow_14"> +      <ns2:BPMNEdge id="template_DI_Flow_14" bpmnElement="template_Flow_14"> 
-        <di:waypoint x="1965.0" y="510.0" /> +        <ns4:waypoint x="1965.0" y="510.0" /> 
-        <di:waypoint x="2010.0" y="510.0" /> +        <ns4:waypoint x="2010.0" y="510.0" /> 
-        <di:waypoint x="2010.0" y="660.0" /> +        <ns4:waypoint x="2010.0" y="660.0" /> 
-        <di:waypoint x="1370.0" y="660.0" /> +        <ns4:waypoint x="1370.0" y="660.0" /> 
-        <di:waypoint x="1370.0" y="775.0" /> +        <ns4:waypoint x="1370.0" y="775.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_15" bpmnElement="template_Flow_15"> +      <ns2:BPMNEdge id="template_DI_Flow_15" bpmnElement="template_Flow_15"> 
-        <di:waypoint x="2225.0" y="510.0" /> +        <ns4:waypoint x="2225.0" y="510.0" /> 
-        <di:waypoint x="2280.0" y="510.0" /> +        <ns4:waypoint x="2280.0" y="510.0" /> 
-        <di:waypoint x="2280.0" y="640.0" /> +        <ns4:waypoint x="2280.0" y="640.0" /> 
-        <di:waypoint x="1370.0" y="640.0" /> +        <ns4:waypoint x="1370.0" y="640.0" /> 
-        <di:waypoint x="1370.0" y="775.0" /> +        <ns4:waypoint x="1370.0" y="775.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_16" bpmnElement="template_Flow_16"> +      <ns2:BPMNEdge id="template_DI_Flow_16" bpmnElement="template_Flow_16"> 
-        <di:waypoint x="658.0" y="145.0" /> +        <ns4:waypoint x="658.0" y="145.0" /> 
-        <di:waypoint x="700.0" y="145.0" /> +        <ns4:waypoint x="700.0" y="145.0" /> 
-        <di:waypoint x="700.0" y="590.0" /> +        <ns4:waypoint x="700.0" y="590.0" /> 
-        <di:waypoint x="2150.0" y="590.0" /> +        <ns4:waypoint x="2150.0" y="590.0" /> 
-        <di:waypoint x="2150.0" y="475.0" /> +        <ns4:waypoint x="2150.0" y="475.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_17" bpmnElement="template_Flow_17"> +      <ns2:BPMNEdge id="template_DI_Flow_17" bpmnElement="template_Flow_17"> 
-        <di:waypoint x="918.0" y="345.0" /> +        <ns4:waypoint x="918.0" y="345.0" /> 
-        <di:waypoint x="960.0" y="345.0" /> +        <ns4:waypoint x="960.0" y="345.0" /> 
-        <di:waypoint x="960.0" y="570.0" /> +        <ns4:waypoint x="960.0" y="570.0" /> 
-        <di:waypoint x="2150.0" y="570.0" /> +        <ns4:waypoint x="2150.0" y="570.0" /> 
-        <di:waypoint x="2150.0" y="475.0" /> +        <ns4:waypoint x="2150.0" y="475.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_18" bpmnElement="template_Flow_18"> +      <ns2:BPMNEdge id="template_DI_Flow_18" bpmnElement="template_Flow_18"> 
-        <di:waypoint x="1698.0" y="345.0" /> +        <ns4:waypoint x="1698.0" y="345.0" /> 
-        <di:waypoint x="1740.0" y="345.0" /> +        <ns4:waypoint x="1740.0" y="345.0" /> 
-        <di:waypoint x="2150.0" y="345.0" /> +        <ns4:waypoint x="2150.0" y="345.0" /> 
-        <di:waypoint x="2150.0" y="475.0" /> +        <ns4:waypoint x="2150.0" y="475.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_19" bpmnElement="template_Flow_19"> +      <ns2:BPMNEdge id="template_DI_Flow_19" bpmnElement="template_Flow_19"> 
-        <di:waypoint x="1698.0" y="545.0" /> +        <ns4:waypoint x="1698.0" y="545.0" /> 
-        <di:waypoint x="1740.0" y="545.0" /> +        <ns4:waypoint x="1740.0" y="545.0" /> 
-        <di:waypoint x="1740.0" y="600.0" /> +        <ns4:waypoint x="1740.0" y="600.0" /> 
-        <di:waypoint x="2150.0" y="600.0" /> +        <ns4:waypoint x="2150.0" y="600.0" /> 
-        <di:waypoint x="2150.0" y="475.0" /> +        <ns4:waypoint x="2150.0" y="475.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_20" bpmnElement="template_Flow_20"> +      <ns2:BPMNEdge id="template_DI_Flow_20" bpmnElement="template_Flow_20"> 
-        <di:waypoint x="1395.0" y="800.0" /> +        <ns4:waypoint x="1395.0" y="800.0" /> 
-        <di:waypoint x="1503.5" y="800.0" /> +        <ns4:waypoint x="1503.5" y="800.0" /> 
-        <di:waypoint x="1503.5" y="730.0" /> +        <ns4:waypoint x="1503.5" y="730.0" /> 
-        <di:waypoint x="1612.0" y="730.0" /> +        <ns4:waypoint x="1612.0" y="730.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_21" bpmnElement="template_Flow_21"> +      <ns2:BPMNEdge id="template_DI_Flow_21" bpmnElement="template_Flow_21"> 
-        <di:waypoint x="1395.0" y="800.0" /> +        <ns4:waypoint x="1395.0" y="800.0" /> 
-        <di:waypoint x="1503.5" y="800.0" /> +        <ns4:waypoint x="1503.5" y="800.0" /> 
-        <di:waypoint x="1503.5" y="930.0" /> +        <ns4:waypoint x="1503.5" y="930.0" /> 
-        <di:waypoint x="1612.0" y="930.0" /> +        <ns4:waypoint x="1612.0" y="930.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_22" bpmnElement="template_Flow_22"> +      <ns2:BPMNEdge id="template_DI_Flow_22" bpmnElement="template_Flow_22"> 
-        <di:waypoint x="1648.0" y="730.0" /> +        <ns4:waypoint x="1648.0" y="730.0" /> 
-        <di:waypoint x="1731.5" y="730.0" /> +        <ns4:waypoint x="1731.5" y="730.0" /> 
-        <di:waypoint x="1731.5" y="800.0" /> +        <ns4:waypoint x="1731.5" y="800.0" /> 
-        <di:waypoint x="1815.0" y="800.0" /> +        <ns4:waypoint x="1815.0" y="800.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_23" bpmnElement="template_Flow_23"> +      <ns2:BPMNEdge id="template_DI_Flow_23" bpmnElement="template_Flow_23"> 
-        <di:waypoint x="1648.0" y="930.0" /> +        <ns4:waypoint x="1648.0" y="930.0" /> 
-        <di:waypoint x="1731.5" y="930.0" /> +        <ns4:waypoint x="1731.5" y="930.0" /> 
-        <di:waypoint x="1731.5" y="800.0" /> +        <ns4:waypoint x="1731.5" y="800.0" /> 
-        <di:waypoint x="1815.0" y="800.0" /> +        <ns4:waypoint x="1815.0" y="800.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_24" bpmnElement="template_Flow_24"> +      <ns2:BPMNEdge id="template_DI_Flow_24" bpmnElement="template_Flow_24"> 
-        <di:waypoint x="1965.0" y="800.0" /> +        <ns4:waypoint x="1965.0" y="800.0" /> 
-        <di:waypoint x="2410.0" y="800.0" /> +        <ns4:waypoint x="2410.0" y="800.0" /> 
-        <di:waypoint x="2410.0" y="25.0" /> +        <ns4:waypoint x="2410.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="2120.0" y="5.0" width="180" height="26" /> +          <ns3:Bounds x="2120.0" y="5.0" width="180" height="26" /> 
-        </bpmndi:BPMNLabel> +        </ns2:BPMNLabel> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-      <bpmndi:BPMNEdge id="template_DI_Flow_25" bpmnElement="template_Flow_25"> +      <ns2:BPMNEdge id="template_DI_Flow_25" bpmnElement="template_Flow_25"> 
-        <di:waypoint x="1705.0" y="310.0" /> +        <ns4:waypoint x="1705.0" y="310.0" /> 
-        <di:waypoint x="2132.0" y="310.0" /> +        <ns4:waypoint x="2132.0" y="310.0" /> 
-      </bpmndi:BPMNEdge> +      </ns2:BPMNEdge> 
-    </bpmndi:BPMNPlane> +    </ns2:BPMNPlane> 
-  </bpmndi:BPMNDiagram>+  </ns2:BPMNDiagram>
 </bpmn:definitions> </bpmn:definitions>
 </sharix-bpmn> </sharix-bpmn>
Строка 601: Строка 697:
 <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" id="Definitions_service_template_external" targetNamespace="urn:sharix:knowledge:handlers">+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:ns1="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:ns2="http://www.omg.org/spec/DD/20100524/DC" xmlns:ns3="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_service_template_external" targetNamespace="urn:sharix:knowledge:handlers">
   <bpmn:process id="person_Process_person" name="Автор / личный клиент заказа с доступным действием" isExecutable="false">   <bpmn:process id="person_Process_person" name="Автор / личный клиент заказа с доступным действием" isExecutable="false">
     <bpmn:documentation>{"notes": ["Git built-in; BPMN isExecutable=false. Handler при генерации не исполняется.", "Дата закрытия считается runtime: planned_start + SERVICE_REQUEST_TEMPLATE_CLOSE_AFTER_START_SECONDS.", "Intent-очередь, дедупликация и reminder counters — в памяти, не durable delivery guarantee.", "202 означает только relay acceptance. Канонический action имеет собственное решение.", "Прямой actions API также существует и запускает ту же доменную операцию без handler-intent очереди."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_template.py", "repository": "sharix-open-handlers-examples", "sha256": "a5e86f4580c8add4b05c6e58fa33306f5b4a2419d0951523afb996bff6e9e51b"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_template.json", "repository": "sharix-open-handlers-examples", "sha256": "6fb731e413f8fb8709e0b1e578a1da883c1d5a46ce291675114b32ec52619925"}, {"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"}]}</bpmn:documentation>     <bpmn:documentation>{"notes": ["Git built-in; BPMN isExecutable=false. Handler при генерации не исполняется.", "Дата закрытия считается runtime: planned_start + SERVICE_REQUEST_TEMPLATE_CLOSE_AFTER_START_SECONDS.", "Intent-очередь, дедупликация и reminder counters — в памяти, не durable delivery guarantee.", "202 означает только relay acceptance. Канонический action имеет собственное решение.", "Прямой actions API также существует и запускает ту же доменную операцию без handler-intent очереди."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_template.py", "repository": "sharix-open-handlers-examples", "sha256": "a5e86f4580c8add4b05c6e58fa33306f5b4a2419d0951523afb996bff6e9e51b"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_template.json", "repository": "sharix-open-handlers-examples", "sha256": "6fb731e413f8fb8709e0b1e578a1da883c1d5a46ce291675114b32ec52619925"}, {"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"}]}</bpmn:documentation>
Строка 746: Строка 842:
     <bpmn:messageFlow id="Message_service_template_external_3" sourceRef="person_send" targetRef="backend_start" name="Альтернатива: прямой actions API" />     <bpmn:messageFlow id="Message_service_template_external_3" sourceRef="person_send" targetRef="backend_start" name="Альтернатива: прямой actions API" />
   </bpmn:collaboration>   </bpmn:collaboration>
-  <bpmndi:BPMNDiagram id="Diagram_service_template_external"> +  <ns1:BPMNDiagram id="Diagram_service_template_external"> 
-    <bpmndi:BPMNPlane id="Plane_service_template_external" bpmnElement="Collaboration_service_template_external"> +    <ns1:BPMNPlane id="Plane_service_template_external" bpmnElement="Collaboration_service_template_external"> 
-      <bpmndi:BPMNShape id="person_DI_Pool_person" bpmnElement="person_Pool_person" isHorizontal="true"> +      <ns1:BPMNShape id="person_DI_Pool_person" bpmnElement="person_Pool_person" isHorizontal="true"> 
-        <dc:Bounds x="0.0" y="0.0" width="920" height="200" /> +        <ns2:Bounds x="0.0" y="0.0" width="920" height="200" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="person_DI_Lane_worker" bpmnElement="person_Lane_worker" isHorizontal="true"> +      <ns1:BPMNShape id="person_DI_Lane_worker" bpmnElement="person_Lane_worker" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="0.0" width="890" height="200" /> +        <ns2:Bounds x="30.0" y="0.0" width="890" height="200" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="person_DI_start" bpmnElement="person_start"> +      <ns1:BPMNShape id="person_DI_start" bpmnElement="person_start"> 
-        <dc:Bounds x="132.0" y="82.0" width="36" height="36" /> +        <ns2:Bounds x="132.0" y="82.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="person_DI_send" bpmnElement="person_send"> +      <ns1:BPMNShape id="person_DI_send" bpmnElement="person_send"> 
-        <dc:Bounds x="375.0" y="65.0" width="150" height="70" /> +        <ns2:Bounds x="375.0" y="65.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="person_DI_end" bpmnElement="person_end"> +      <ns1:BPMNShape id="person_DI_end" bpmnElement="person_end"> 
-        <dc:Bounds x="742.0" y="82.0" width="36" height="36" /> +        <ns2:Bounds x="742.0" y="82.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNEdge id="person_DI_Flow_0" bpmnElement="person_Flow_0"> +      <ns1:BPMNEdge id="person_DI_Flow_0" bpmnElement="person_Flow_0"> 
-        <di:waypoint x="168.0" y="100.0" /> +        <ns3:waypoint x="168.0" y="100.0" /> 
-        <di:waypoint x="375.0" y="100.0" /> +        <ns3:waypoint x="375.0" y="100.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="person_DI_Flow_1" bpmnElement="person_Flow_1"> +      <ns1:BPMNEdge id="person_DI_Flow_1" bpmnElement="person_Flow_1"> 
-        <di:waypoint x="525.0" y="100.0" /> +        <ns3:waypoint x="525.0" y="100.0" /> 
-        <di:waypoint x="742.0" y="100.0" /> +        <ns3:waypoint x="742.0" y="100.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNShape id="relay_DI_Pool_relay" bpmnElement="relay_Pool_relay" isHorizontal="true"> +      <ns1:BPMNShape id="relay_DI_Pool_relay" bpmnElement="relay_Pool_relay" isHorizontal="true"> 
-        <dc:Bounds x="0.0" y="300.0" width="1220" height="200" /> +        <ns2:Bounds x="0.0" y="300.0" width="1220" height="200" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="relay_DI_Lane_worker" bpmnElement="relay_Lane_worker" isHorizontal="true"> +      <ns1:BPMNShape id="relay_DI_Lane_worker" bpmnElement="relay_Lane_worker" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="300.0" width="1190" height="200" /> +        <ns2:Bounds x="30.0" y="300.0" width="1190" height="200" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="relay_DI_start" bpmnElement="relay_start"> +      <ns1:BPMNShape id="relay_DI_start" bpmnElement="relay_start"> 
-        <dc:Bounds x="132.0" y="382.0" width="36" height="36" /> +        <ns2:Bounds x="132.0" y="382.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="relay_DI_acl" bpmnElement="relay_acl"> +      <ns1:BPMNShape id="relay_DI_acl" bpmnElement="relay_acl"> 
-        <dc:Bounds x="375.0" y="365.0" width="150" height="70" /> +        <ns2:Bounds x="375.0" y="365.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="relay_DI_xmpp" bpmnElement="relay_xmpp"> +      <ns1:BPMNShape id="relay_DI_xmpp" bpmnElement="relay_xmpp"> 
-        <dc:Bounds x="685.0" y="365.0" width="150" height="70" /> +        <ns2:Bounds x="685.0" y="365.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="relay_DI_end" bpmnElement="relay_end"> +      <ns1:BPMNShape id="relay_DI_end" bpmnElement="relay_end"> 
-        <dc:Bounds x="1042.0" y="382.0" width="36" height="36" /> +        <ns2:Bounds x="1042.0" y="382.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNEdge id="relay_DI_Flow_0" bpmnElement="relay_Flow_0"> +      <ns1:BPMNEdge id="relay_DI_Flow_0" bpmnElement="relay_Flow_0"> 
-        <di:waypoint x="168.0" y="400.0" /> +        <ns3:waypoint x="168.0" y="400.0" /> 
-        <di:waypoint x="375.0" y="400.0" /> +        <ns3:waypoint x="375.0" y="400.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="relay_DI_Flow_1" bpmnElement="relay_Flow_1"> +      <ns1:BPMNEdge id="relay_DI_Flow_1" bpmnElement="relay_Flow_1"> 
-        <di:waypoint x="525.0" y="400.0" /> +        <ns3:waypoint x="525.0" y="400.0" /> 
-        <di:waypoint x="685.0" y="400.0" /> +        <ns3:waypoint x="685.0" y="400.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="relay_DI_Flow_2" bpmnElement="relay_Flow_2"> +      <ns1:BPMNEdge id="relay_DI_Flow_2" bpmnElement="relay_Flow_2"> 
-        <di:waypoint x="835.0" y="400.0" /> +        <ns3:waypoint x="835.0" y="400.0" /> 
-        <di:waypoint x="1042.0" y="400.0" /> +        <ns3:waypoint x="1042.0" y="400.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNShape id="handler_DI_Pool_handler" bpmnElement="handler_Pool_handler" isHorizontal="true"> +      <ns1:BPMNShape id="handler_DI_Pool_handler" bpmnElement="handler_Pool_handler" isHorizontal="true"> 
-        <dc:Bounds x="0.0" y="650.0" width="1520" height="200" /> +        <ns2:Bounds x="0.0" y="650.0" width="1520" height="200" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="handler_DI_Lane_worker" bpmnElement="handler_Lane_worker" isHorizontal="true"> +      <ns1:BPMNShape id="handler_DI_Lane_worker" bpmnElement="handler_Lane_worker" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="650.0" width="1490" height="200" /> +        <ns2:Bounds x="30.0" y="650.0" width="1490" height="200" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="handler_DI_start" bpmnElement="handler_start"> +      <ns1:BPMNShape id="handler_DI_start" bpmnElement="handler_start"> 
-        <dc:Bounds x="132.0" y="732.0" width="36" height="36" /> +        <ns2:Bounds x="132.0" y="732.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="handler_DI_validate" bpmnElement="handler_validate"> +      <ns1:BPMNShape id="handler_DI_validate" bpmnElement="handler_validate"> 
-        <dc:Bounds x="375.0" y="715.0" width="150" height="70" /> +        <ns2:Bounds x="375.0" y="715.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="handler_DI_queue" bpmnElement="handler_queue"> +      <ns1:BPMNShape id="handler_DI_queue" bpmnElement="handler_queue"> 
-        <dc:Bounds x="685.0" y="715.0" width="150" height="70" /> +        <ns2:Bounds x="685.0" y="715.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="handler_DI_apply" bpmnElement="handler_apply"> +      <ns1:BPMNShape id="handler_DI_apply" bpmnElement="handler_apply"> 
-        <dc:Bounds x="985.0" y="715.0" width="150" height="70" /> +        <ns2:Bounds x="985.0" y="715.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="handler_DI_end" bpmnElement="handler_end"> +      <ns1:BPMNShape id="handler_DI_end" bpmnElement="handler_end"> 
-        <dc:Bounds x="1342.0" y="732.0" width="36" height="36" /> +        <ns2:Bounds x="1342.0" y="732.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNEdge id="handler_DI_Flow_0" bpmnElement="handler_Flow_0"> +      <ns1:BPMNEdge id="handler_DI_Flow_0" bpmnElement="handler_Flow_0"> 
-        <di:waypoint x="168.0" y="750.0" /> +        <ns3:waypoint x="168.0" y="750.0" /> 
-        <di:waypoint x="375.0" y="750.0" /> +        <ns3:waypoint x="375.0" y="750.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="handler_DI_Flow_1" bpmnElement="handler_Flow_1"> +      <ns1:BPMNEdge id="handler_DI_Flow_1" bpmnElement="handler_Flow_1"> 
-        <di:waypoint x="525.0" y="750.0" /> +        <ns3:waypoint x="525.0" y="750.0" /> 
-        <di:waypoint x="685.0" y="750.0" /> +        <ns3:waypoint x="685.0" y="750.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="handler_DI_Flow_2" bpmnElement="handler_Flow_2"> +      <ns1:BPMNEdge id="handler_DI_Flow_2" bpmnElement="handler_Flow_2"> 
-        <di:waypoint x="835.0" y="750.0" /> +        <ns3:waypoint x="835.0" y="750.0" /> 
-        <di:waypoint x="985.0" y="750.0" /> +        <ns3:waypoint x="985.0" y="750.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="handler_DI_Flow_3" bpmnElement="handler_Flow_3"> +      <ns1:BPMNEdge id="handler_DI_Flow_3" bpmnElement="handler_Flow_3"> 
-        <di:waypoint x="1135.0" y="750.0" /> +        <ns3:waypoint x="1135.0" y="750.0" /> 
-        <di:waypoint x="1342.0" y="750.0" /> +        <ns3:waypoint x="1342.0" y="750.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNShape id="backend_DI_Pool_backend" bpmnElement="backend_Pool_backend" isHorizontal="true"> +      <ns1:BPMNShape id="backend_DI_Pool_backend" bpmnElement="backend_Pool_backend" isHorizontal="true"> 
-        <dc:Bounds x="0.0" y="1000.0" width="1800" height="380" /> +        <ns2:Bounds x="0.0" y="1000.0" width="1890.0" height="380" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_Lane_worker" bpmnElement="backend_Lane_worker" isHorizontal="true"> +      <ns1:BPMNShape id="backend_DI_Lane_worker" bpmnElement="backend_Lane_worker" isHorizontal="true"> 
-        <dc:Bounds x="30.0" y="1000.0" width="1770" height="380" /> +        <ns2:Bounds x="30.0" y="1000.0" width="1860.0" height="380" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_start" bpmnElement="backend_start"> +      <ns1:BPMNShape id="backend_DI_start" bpmnElement="backend_start"> 
-        <dc:Bounds x="132.0" y="1082.0" width="36" height="36" /> +        <ns2:Bounds x="132.0" y="1082.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_check" bpmnElement="backend_check"> +      <ns1:BPMNShape id="backend_DI_check" bpmnElement="backend_check"> 
-        <dc:Bounds x="375.0" y="1065.0" width="150" height="70" /> +        <ns2:Bounds x="375.0" y="1065.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_decide" bpmnElement="backend_decide"> +      <ns1:BPMNShape id="backend_DI_decide" bpmnElement="backend_decide"> 
-        <dc:Bounds x="735.0" y="1075.0" width="50" height="50" /> +        <ns2:Bounds x="735.0" y="1075.0" width="50" height="50" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_save" bpmnElement="backend_save"> +      <ns1:BPMNShape id="backend_DI_save" bpmnElement="backend_save"> 
-        <dc:Bounds x="985.0" y="1065.0" width="150" height="70" /> +        <ns2:Bounds x="985.0" y="1065.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_wake" bpmnElement="backend_wake"> +      <ns1:BPMNShape id="backend_DI_wake" bpmnElement="backend_wake"> 
-        <dc:Bounds x="1285.0" y="1065.0" width="150" height="70" /> +        <ns2:Bounds x="1285.0" y="1065.0" width="150" height="70" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_end" bpmnElement="backend_end"> +      <ns1:BPMNShape id="backend_DI_end" bpmnElement="backend_end"> 
-        <dc:Bounds x="1622.0" y="1082.0" width="36" height="36" /> +        <ns2:Bounds x="1622.0" y="1082.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNShape id="backend_DI_reject" bpmnElement="backend_reject"> +      <ns1:BPMNShape id="backend_DI_reject" bpmnElement="backend_reject"> 
-        <dc:Bounds x="742.0" y="1262.0" width="36" height="36" /> +        <ns2:Bounds x="742.0" y="1262.0" width="36" height="36" /> 
-      </bpmndi:BPMNShape> +      </ns1:BPMNShape> 
-      <bpmndi:BPMNEdge id="backend_DI_Flow_0" bpmnElement="backend_Flow_0"> +      <ns1:BPMNEdge id="backend_DI_Flow_0" bpmnElement="backend_Flow_0"> 
-        <di:waypoint x="168.0" y="1100.0" /> +        <ns3:waypoint x="168.0" y="1100.0" /> 
-        <di:waypoint x="375.0" y="1100.0" /> +        <ns3:waypoint x="375.0" y="1100.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="backend_DI_Flow_1" bpmnElement="backend_Flow_1"> +      <ns1:BPMNEdge id="backend_DI_Flow_1" bpmnElement="backend_Flow_1"> 
-        <di:waypoint x="525.0" y="1100.0" /> +        <ns3:waypoint x="525.0" y="1100.0" /> 
-        <di:waypoint x="735.0" y="1100.0" /> +        <ns3:waypoint x="735.0" y="1100.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="backend_DI_Flow_2" bpmnElement="backend_Flow_2"> +      <ns1:BPMNEdge id="backend_DI_Flow_2" bpmnElement="backend_Flow_2"> 
-        <di:waypoint x="785.0" y="1100.0" /> +        <ns3:waypoint x="785.0" y="1100.0" /> 
-        <di:waypoint x="985.0" y="1100.0" /> +        <ns3:waypoint x="985.0" y="1100.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="backend_DI_Flow_3" bpmnElement="backend_Flow_3"> +      <ns1:BPMNEdge id="backend_DI_Flow_3" bpmnElement="backend_Flow_3"> 
-        <di:waypoint x="760.0" y="1125.0" /> +        <ns3:waypoint x="760.0" y="1125.0" /> 
-        <di:waypoint x="760.0" y="1262.0" /> +        <ns3:waypoint x="760.0" y="1262.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="backend_DI_Flow_4" bpmnElement="backend_Flow_4"> +      <ns1:BPMNEdge id="backend_DI_Flow_4" bpmnElement="backend_Flow_4"> 
-        <di:waypoint x="1135.0" y="1100.0" /> +        <ns3:waypoint x="1135.0" y="1100.0" /> 
-        <di:waypoint x="1285.0" y="1100.0" /> +        <ns3:waypoint x="1285.0" y="1100.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="backend_DI_Flow_5" bpmnElement="backend_Flow_5"> +      <ns1:BPMNEdge id="backend_DI_Flow_5" bpmnElement="backend_Flow_5"> 
-        <di:waypoint x="1435.0" y="1100.0" /> +        <ns3:waypoint x="1435.0" y="1100.0" /> 
-        <di:waypoint x="1622.0" y="1100.0" /> +        <ns3:waypoint x="1622.0" y="1100.0" /> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="DI_Message_service_template_external_0" bpmnElement="Message_service_template_external_0"> +      <ns1:BPMNEdge id="DI_Message_service_template_external_0" bpmnElement="Message_service_template_external_0"> 
-        <di:waypoint x="450" y="135" /> +        <ns3:waypoint x="450" y="135" /> 
-        <di:waypoint x="450" y="245" /> +        <ns3:waypoint x="450" y="245" /> 
-        <di:waypoint x="150" y="245" /> +        <ns3:waypoint x="150" y="245" /> 
-        <di:waypoint x="150" y="382" /> +        <ns3:waypoint x="150" y="382" /> 
-        <bpmndi:BPMNLabel> +        <ns1:BPMNLabel> 
-          <dc:Bounds x="170" y="215" width="260" height="42" /> +          <ns2:Bounds x="170" y="215" width="260" height="42" /> 
-        </bpmndi:BPMNLabel> +        </ns1:BPMNLabel> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="DI_Message_service_template_external_1" bpmnElement="Message_service_template_external_1"> +      <ns1:BPMNEdge id="DI_Message_service_template_external_1" bpmnElement="Message_service_template_external_1"> 
-        <di:waypoint x="760" y="435" /> +        <ns3:waypoint x="760" y="435" /> 
-        <di:waypoint x="760" y="590" /> +        <ns3:waypoint x="760" y="590" /> 
-        <di:waypoint x="150" y="590" /> +        <ns3:waypoint x="150" y="590" /> 
-        <di:waypoint x="150" y="732" /> +        <ns3:waypoint x="150" y="732" /> 
-        <bpmndi:BPMNLabel> +        <ns1:BPMNLabel> 
-          <dc:Bounds x="190" y="555" width="260" height="42" /> +          <ns2:Bounds x="190" y="555" width="260" height="42" /> 
-        </bpmndi:BPMNLabel> +        </ns1:BPMNLabel> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="DI_Message_service_template_external_2" bpmnElement="Message_service_template_external_2"> +      <ns1:BPMNEdge id="DI_Message_service_template_external_2" bpmnElement="Message_service_template_external_2"> 
-        <di:waypoint x="1060" y="785" /> +        <ns3:waypoint x="1060" y="785" /> 
-        <di:waypoint x="1060" y="940" /> +        <ns3:waypoint x="1060" y="940" /> 
-        <di:waypoint x="150" y="940" /> +        <ns3:waypoint x="150" y="940" /> 
-        <di:waypoint x="150" y="1082" /> +        <ns3:waypoint x="150" y="1082" /> 
-        <bpmndi:BPMNLabel> +        <ns1:BPMNLabel> 
-          <dc:Bounds x="230" y="905" width="260" height="42" /> +          <ns2:Bounds x="230" y="905" width="260" height="42" /> 
-        </bpmndi:BPMNLabel> +        </ns1:BPMNLabel> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-      <bpmndi:BPMNEdge id="DI_Message_service_template_external_3" bpmnElement="Message_service_template_external_3"> +      <ns1:BPMNEdge id="DI_Message_service_template_external_3" bpmnElement="Message_service_template_external_3"> 
-        <di:waypoint x="525" y="100" /> +        <ns3:waypoint x="525" y="100" /> 
-        <di:waypoint x="1850" y="100" /> +        <ns3:waypoint x="1850" y="100" /> 
-        <di:waypoint x="1850" y="950" /> +        <ns3:waypoint x="1850" y="950" /> 
-        <di:waypoint x="75" y="950" /> +        <ns3:waypoint x="75" y="950" /> 
-        <di:waypoint x="75" y="1100" /> +        <ns3:waypoint x="75" y="1100" /> 
-        <di:waypoint x="132" y="1100" /> +        <ns3:waypoint x="132" y="1100" /> 
-        <bpmndi:BPMNLabel> +        <ns1:BPMNLabel> 
-          <dc:Bounds x="1500" y="860" width="260" height="42" /> +          <ns2:Bounds x="1500" y="860" width="260" height="42" /> 
-        </bpmndi:BPMNLabel> +        </ns1:BPMNLabel> 
-      </bpmndi:BPMNEdge> +      </ns1:BPMNEdge> 
-    </bpmndi:BPMNPlane> +    </ns1:BPMNPlane> 
-  </bpmndi:BPMNDiagram>+  </ns1:BPMNDiagram>
 </bpmn:definitions> </bpmn:definitions>
 </sharix-bpmn> </sharix-bpmn>
Строка 939: Строка 1035:
 В relay для TEMPLATE доступны book/cancel по фактическим правам пользователя; subscription-access заказы не получают этот набор интерактивных действий. Текущий ''user_is_order_client'' проверяет автора заказа либо пользователя личного Client. Одно название LDAP-группы или статус «клиент платформы» не заменяют связь пользователя с этим заказом ShariX Open. В relay для TEMPLATE доступны book/cancel по фактическим правам пользователя; subscription-access заказы не получают этот набор интерактивных действий. Текущий ''user_is_order_client'' проверяет автора заказа либо пользователя личного Client. Одно название LDAP-группы или статус «клиент платформы» не заменяют связь пользователя с этим заказом ShariX Open.
  
-Relay определяет handler по текущему Ticket.status, сохраняет actor user id/JID, event id, order/ticket id и стадию, отправляет ''order.action.intent''. Сам relay заказ не меняет. Runtime принимает такой intent только от настроенного доверенного relay JID и ''transport=web_relay'', проверяет структуру и стадию, отсекает известный дубликат event id и ставит намерение в процессную очередь. Произвольное XMPP-сообщение не является разрешением разместить заказ.+Relay определяет handler по Ticket.status и передаёт: 
 + 
 +  * actor user ID и JID; 
 +  * event ID; 
 +  * order ID и ticket ID; 
 +  * стадию; 
 +  * сообщение order.action.intent. 
 + 
 +Relay сам заказ не меняет. Runtime принимает intent от настроенного доверенного relay JID с transport=web_relay, проверяет структуру/стадию, отсекает известный event ID и ставит намерение в память процесса. Произвольное XMPP-сообщение не разрешает размещение заказа.
  
 При применении intent backend заново проверяет активного actor, соответствие переданного JID, текущий связанный заказ и права канонического действия. Очередь и дедупликация runtime находятся в памяти: это не durable гарантия исполнения при рестарте и не exactly-once подтверждение. После 202 нужно смотреть фактический результат/статус заказа, а не считать размещение уже выполненным. При применении intent backend заново проверяет активного actor, соответствие переданного JID, текущий связанный заказ и права канонического действия. Очередь и дедупликация runtime находятся в памяти: это не durable гарантия исполнения при рестарте и не exactly-once подтверждение. После 202 нужно смотреть фактический результат/статус заказа, а не считать размещение уже выполненным.
Строка 1178: Строка 1282:
 </sharix-bpmn> </sharix-bpmn>
  
-Первое напоминание не отправляется раньше ''Ticket.created_at + SERVICE_REQUEST_TEMPLATE_REMINDER_INTERVAL_SECONDS''. Далее учитывается последняя успешная отправка в памяти процесса и тот же интервал. Нет/не разбирается created_at — helper логирует проблему и пропускает напоминание, не закрывая черновик по этой причине.+Условия напоминания: 
 + 
 +  * первая отправка не раньше Ticket.created_at + SERVICE_REQUEST_TEMPLATE_REMINDER_INTERVAL_SECONDS; 
 +  * последующие отправки учитывают последнюю успешную отправку в памяти процесса и тот же интервал; 
 +  * при отсутствующем или неверном created_at helper пишет диагностику и пропускает напоминание. 
 + 
 +Невозможность определить возраст для напоминания сама по себе не закрывает черновик.
  
 Если есть planned_start и наступило ''close_at − SERVICE_REQUEST_TEMPLATE_CLOSE_WARNING_SECONDS'', в сообщение добавляется дата автоматического закрытия. Она форматируется в локальной временной зоне runtime; не следует автоматически считать её часовой зоной пользователя. Напоминание не является гарантированным предварительным уведомлением: интервалы, фактические проходы, реквизиты и доступность XMPP влияют на отправку. Если есть planned_start и наступило ''close_at − SERVICE_REQUEST_TEMPLATE_CLOSE_WARNING_SECONDS'', в сообщение добавляется дата автоматического закрытия. Она форматируется в локальной временной зоне runtime; не следует автоматически считать её часовой зоной пользователя. Напоминание не является гарантированным предварительным уведомлением: интервалы, фактические проходы, реквизиты и доступность XMPP влияют на отправку.
Строка 1200: Строка 1310:
  
 ===== Диагностика ===== ===== Диагностика =====
-Различайте 202 relay, извлечённый intent, доменный результат book/cancel, фактическую стадию Orders/Ticket и доставку wakeup. Для автоматического закрытия проверяйте planned_start, именованный offset и выбранный runtime; для напоминания — created_at, последний send в памяти, warning window, защищённый получатель и транспорт. Одна страница черновика не доказывает, что пользовательский запрос был исполнен.+При диагностике различать: 
 + 
 +  * 202 от relay и фактическое выполнение пользовательского действия; 
 +  * извлечённый intent и доменный результат book/cancel; 
 +  * фактическую стадию Orders/Ticket и доставку wakeup; 
 +  * для автоматического закрытия — planned_start, именованный offset и выбранный runtime; 
 +  * для напоминания — created_at, последний send в памяти, warning window, получателя и транспорт. 
 + 
 +Одна открытая страница черновика не доказывает исполнения пользовательского запроса.
  
 ===== Проверенные источники ===== ===== Проверенные источники =====
sharixopen/knowledge/scenarios/service_request_template.1793218727.txt.gz · Последнее изменение: — sx_knowledge_api_open

© 2022 ShariX