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

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


sharixopen:knowledge:scenarios:service_request_forcemajeure

Это старая версия документа!


SERVICE_REQUEST в FORCEMAJEUER: ожидание внешнего решения

Область: ShariX Open. Обработчик: open_service_request_forcemajeure, тип SERVICE_REQUEST (2), статус FORCEMAJEUER. Проверено 29.10.2026: опубликованный Python побайтово совпадает с канонической генерацией Blockly workspace. Выбранная версия и параметры сервера проверяются отдельно.

Назначение и границы

Заказ уже находится в стадии форс-мажора. Handler сохраняет наблюдение до внешнего решения; сам результат урегулирования этим processing не выбирается.

Это observer, а не автоматический алгоритм разрешения форс-мажора. Он не выбирает целевой статус, не снимает provider, не закрывает заказ, не создаёт support Ticket, не уведомляет автоматически ответственного и не запускает платёжное урегулирование. Наличие слова review/resolution в reason не доказывает, что человек получил задачу.

BPMN описательные, isExecutable=false. Runtime исполняет проверенный Python из Blockly; Wiki не является исполнителем и не добавляет отсутствующие действия.

Наблюдение и таймер (BPMN)

Схема BPMN

Загрузка схемы…

Исходник схемы
<?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_forcemajeure_logic" targetNamespace="urn:sharix:knowledge:handlers">
  <bpmn:process id="observer_Process_observer" name="FORCEMAJEUER: наблюдение без автоматической бизнес-мутации" isExecutable="false">
    <bpmn:documentation>{"notes": ["Описательная BPMN, isExecutable=false; Python побайтово сверён с Blockly.", "Этот processing не меняет заказ, не вызывает context API, не рассылает сообщения и не создаёт support Ticket.", "Reason локальный; таймер означает повтор проверки, не срок автоматического решения."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_forcemajeure.py", "repository": "sharix-open-handlers-examples", "sha256": "d870ab96f80b4003b68c61e2dafd385d4db8bfc18baf32b5c9d271eb944762ab"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_forcemajeure.json", "repository": "sharix-open-handlers-examples", "sha256": "c31b6c3278a9a6caaca929db3358a3dcc21ec20b535c4e540e016e4d1ad9fbeb"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_actions.py", "repository": "sharix-open-backend", "sha256": "27ce243408a46f1b700d94bf78a25c68ef21d51078bb03627174e4a424d82ef0"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_permissions.py", "repository": "sharix-open-backend", "sha256": "9c1636daa80c4da68c3ae5cf347e279127d142eeff91e969559e8bd54ca3d81d"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}]}</bpmn:documentation>
    <bpmn:laneSet id="observer_Lanes_observer">
      <bpmn:lane id="observer_Lane_worker" name="processing и локальная очередь">
        <bpmn:flowNodeRef>observer_start</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_status</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_reason</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_defer</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_wait</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_timer</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_repeat</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_event</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_resync</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_remove</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>observer_end</bpmn:flowNodeRef>
      </bpmn:lane>
    </bpmn:laneSet>
    <bpmn:startEvent id="observer_start" name="Получен Ticket">
      <bpmn:outgoing>observer_Flow_0</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:exclusiveGateway id="observer_status" name="Локально свой FORCEMAJEUER?">
      <bpmn:incoming>observer_Flow_0</bpmn:incoming>
      <bpmn:outgoing>observer_Flow_1</bpmn:outgoing>
      <bpmn:outgoing>observer_Flow_8</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:serviceTask id="observer_reason" name="waiting reason: force_majeure_resolution">
      <bpmn:incoming>observer_Flow_1</bpmn:incoming>
      <bpmn:outgoing>observer_Flow_2</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:serviceTask id="observer_defer" name="Defer из SERVICE_REQUEST_FORCEMAJEURE_RECHECK_SECONDS">
      <bpmn:incoming>observer_Flow_2</bpmn:incoming>
      <bpmn:outgoing>observer_Flow_3</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:eventBasedGateway id="observer_wait" name="Повтор либо новое внешнее событие">
      <bpmn:incoming>observer_Flow_3</bpmn:incoming>
      <bpmn:outgoing>observer_Flow_4</bpmn:outgoing>
      <bpmn:outgoing>observer_Flow_6</bpmn:outgoing>
    </bpmn:eventBasedGateway>
    <bpmn:intermediateCatchEvent id="observer_timer" name="Наступил рассчитанный recheck_at">
      <bpmn:incoming>observer_Flow_4</bpmn:incoming>
      <bpmn:outgoing>observer_Flow_5</bpmn:outgoing>
      <bpmn:timerEventDefinition>
        <bpmn:timeDate xsi:type="bpmn:tFormalExpression">scheduled_recheck_at</bpmn:timeDate>
      </bpmn:timerEventDefinition>
    </bpmn:intermediateCatchEvent>
    <bpmn:endEvent id="observer_repeat" name="Новый проход; worker не занят ожиданием">
      <bpmn:incoming>observer_Flow_5</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:intermediateCatchEvent id="observer_event" name="Ticket.changed / moved / reconcile">
      <bpmn:incoming>observer_Flow_6</bpmn:incoming>
      <bpmn:outgoing>observer_Flow_7</bpmn:outgoing>
      <bpmn:messageEventDefinition />
    </bpmn:intermediateCatchEvent>
    <bpmn:endEvent id="observer_resync" name="Сверить текущее владение очередью">
      <bpmn:incoming>observer_Flow_7</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:serviceTask id="observer_remove" name="Запросить удаление Ticket и комнаты">
      <bpmn:incoming>observer_Flow_8</bpmn:incoming>
      <bpmn:outgoing>observer_Flow_9</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:endEvent id="observer_end" name="Этот handler больше не обрабатывает Ticket">
      <bpmn:incoming>observer_Flow_9</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="observer_Flow_0" sourceRef="observer_start" targetRef="observer_status" name="" />
    <bpmn:sequenceFlow id="observer_Flow_1" sourceRef="observer_status" targetRef="observer_reason" name="Да" />
    <bpmn:sequenceFlow id="observer_Flow_2" sourceRef="observer_reason" targetRef="observer_defer" name="" />
    <bpmn:sequenceFlow id="observer_Flow_3" sourceRef="observer_defer" targetRef="observer_wait" name="" />
    <bpmn:sequenceFlow id="observer_Flow_4" sourceRef="observer_wait" targetRef="observer_timer" name="" />
    <bpmn:sequenceFlow id="observer_Flow_5" sourceRef="observer_timer" targetRef="observer_repeat" name="" />
    <bpmn:sequenceFlow id="observer_Flow_6" sourceRef="observer_wait" targetRef="observer_event" name="" />
    <bpmn:sequenceFlow id="observer_Flow_7" sourceRef="observer_event" targetRef="observer_resync" name="" />
    <bpmn:sequenceFlow id="observer_Flow_8" sourceRef="observer_status" targetRef="observer_remove" name="Нет" />
    <bpmn:sequenceFlow id="observer_Flow_9" sourceRef="observer_remove" targetRef="observer_end" name="" />
  </bpmn:process>
  <bpmn:collaboration id="Collaboration_service_forcemajeure_logic">
    <bpmn:participant id="observer_Pool_observer" name="FORCEMAJEUER: наблюдение без автоматической бизнес-мутации" processRef="observer_Process_observer" />
  </bpmn:collaboration>
  <bpmndi:BPMNDiagram id="Diagram_service_forcemajeure_logic">
    <bpmndi:BPMNPlane id="Plane_service_forcemajeure_logic" bpmnElement="Collaboration_service_forcemajeure_logic">
      <bpmndi:BPMNShape id="observer_DI_Pool_observer" bpmnElement="observer_Pool_observer" isHorizontal="true">
        <dc:Bounds x="0.0" y="0.0" width="2150" height="680" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_Lane_worker" bpmnElement="observer_Lane_worker" isHorizontal="true">
        <dc:Bounds x="30.0" y="0.0" width="2120" height="680" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_start" bpmnElement="observer_start">
        <dc:Bounds x="132.0" y="82.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_status" bpmnElement="observer_status">
        <dc:Bounds x="415.0" y="75.0" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_reason" bpmnElement="observer_reason">
        <dc:Bounds x="675.0" y="65.0" width="150" height="70" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_defer" bpmnElement="observer_defer">
        <dc:Bounds x="985.0" y="65.0" width="150" height="70" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_wait" bpmnElement="observer_wait">
        <dc:Bounds x="1345.0" y="75.0" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_timer" bpmnElement="observer_timer">
        <dc:Bounds x="1662.0" y="82.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_repeat" bpmnElement="observer_repeat">
        <dc:Bounds x="1972.0" y="82.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_event" bpmnElement="observer_event">
        <dc:Bounds x="1662.0" y="322.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_resync" bpmnElement="observer_resync">
        <dc:Bounds x="1972.0" y="322.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_remove" bpmnElement="observer_remove">
        <dc:Bounds x="365.0" y="545.0" width="150" height="70" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="observer_DI_end" bpmnElement="observer_end">
        <dc:Bounds x="732.0" y="562.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="observer_DI_Flow_0" bpmnElement="observer_Flow_0">
        <di:waypoint x="168.0" y="100.0" />
        <di:waypoint x="415.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_1" bpmnElement="observer_Flow_1">
        <di:waypoint x="465.0" y="100.0" />
        <di:waypoint x="675.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_2" bpmnElement="observer_Flow_2">
        <di:waypoint x="825.0" y="100.0" />
        <di:waypoint x="985.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_3" bpmnElement="observer_Flow_3">
        <di:waypoint x="1135.0" y="100.0" />
        <di:waypoint x="1345.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_4" bpmnElement="observer_Flow_4">
        <di:waypoint x="1395.0" y="100.0" />
        <di:waypoint x="1662.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_5" bpmnElement="observer_Flow_5">
        <di:waypoint x="1698.0" y="100.0" />
        <di:waypoint x="1972.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_6" bpmnElement="observer_Flow_6">
        <di:waypoint x="1395.0" y="100.0" />
        <di:waypoint x="1528.5" y="100.0" />
        <di:waypoint x="1528.5" y="340.0" />
        <di:waypoint x="1662.0" y="340.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_7" bpmnElement="observer_Flow_7">
        <di:waypoint x="1698.0" y="340.0" />
        <di:waypoint x="1972.0" y="340.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_8" bpmnElement="observer_Flow_8">
        <di:waypoint x="440.0" y="125.0" />
        <di:waypoint x="440.0" y="545.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="observer_DI_Flow_9" bpmnElement="observer_Flow_9">
        <di:waypoint x="515.0" y="580.0" />
        <di:waypoint x="732.0" y="580.0" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

Processing проверяет локальный статус. При совпадении записывает force_majeure_resolution и назначает defer по SERVICE_REQUEST_FORCEMAJEURE_RECHECK_SECONDS. Worker освобождается до следующего готового прохода. Параметр reason у defer здесь пустой: он не заменяет уже установленный waiting reason.

При чужом статусе handler запрашивает удаление Ticket из очереди и комнаты и возвращает None. Его processing не делает scoped order context GET и не меняет Orders/Ticket. Актуальный состав восстанавливается общим runtime через события и периодическую сверку, поэтому одна локальная проверка статуса не является отдельной проверкой всех бизнес-условий заказа.

Таймер — срок повторного наблюдения, не дедлайн автоматического решения. Уменьшение RECHECK не добавляет бизнес-логику. Если никто не принял внешнего решения, Ticket может оставаться здесь неопределённо долго.

Внешнее решение и передача владения (BPMN)

Схема BPMN

Загрузка схемы…

Исходник схемы
<?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_forcemajeure_external" targetNamespace="urn:sharix:knowledge:handlers">
  <bpmn:process id="staff_Process_staff" name="Уполномоченный участник и канонический backend вне observer" isExecutable="false">
    <bpmn:documentation>{"notes": ["Описательная BPMN, isExecutable=false; Python побайтово сверён с Blockly.", "Этот processing не меняет заказ, не вызывает context API, не рассылает сообщения и не создаёт support Ticket.", "Reason локальный; таймер означает повтор проверки, не срок автоматического решения.", "Внешнее решение выполняет отдельный разрешённый actor/action-layer, не observer.", "Следующий статус и допустимость действия не выводятся из одного waiting reason."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_forcemajeure.py", "repository": "sharix-open-handlers-examples", "sha256": "d870ab96f80b4003b68c61e2dafd385d4db8bfc18baf32b5c9d271eb944762ab"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_forcemajeure.json", "repository": "sharix-open-handlers-examples", "sha256": "c31b6c3278a9a6caaca929db3358a3dcc21ec20b535c4e540e016e4d1ad9fbeb"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_actions.py", "repository": "sharix-open-backend", "sha256": "27ce243408a46f1b700d94bf78a25c68ef21d51078bb03627174e4a424d82ef0"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_permissions.py", "repository": "sharix-open-backend", "sha256": "9c1636daa80c4da68c3ae5cf347e279127d142eeff91e969559e8bd54ca3d81d"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}]}</bpmn:documentation>
    <bpmn:laneSet id="staff_Lanes_staff">
      <bpmn:lane id="staff_Lane_worker" name="Company/object scope; разрешение и допустимость целевой стадии">
        <bpmn:flowNodeRef>staff_start</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>staff_decision</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>staff_action</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>staff_save</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>staff_send</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>staff_end</bpmn:flowNodeRef>
      </bpmn:lane>
    </bpmn:laneSet>
    <bpmn:startEvent id="staff_start" name="Изучить проблему и текущее состояние">
      <bpmn:outgoing>staff_Flow_0</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:userTask id="staff_decision" name="Принять решение по заказу">
      <bpmn:incoming>staff_Flow_0</bpmn:incoming>
      <bpmn:outgoing>staff_Flow_1</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:serviceTask id="staff_action" name="Разрешённый action-layer: проверить actor/scope/target">
      <bpmn:incoming>staff_Flow_1</bpmn:incoming>
      <bpmn:outgoing>staff_Flow_2</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:serviceTask id="staff_save" name="Сохранить предусмотренное изменение">
      <bpmn:incoming>staff_Flow_2</bpmn:incoming>
      <bpmn:outgoing>staff_Flow_3</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sendTask id="staff_send" name="После commit: wakeup актуальному/прежнему владельцу">
      <bpmn:incoming>staff_Flow_3</bpmn:incoming>
      <bpmn:outgoing>staff_Flow_4</bpmn:outgoing>
    </bpmn:sendTask>
    <bpmn:endEvent id="staff_end" name="Результат определяется сохранённым Ticket">
      <bpmn:incoming>staff_Flow_4</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="staff_Flow_0" sourceRef="staff_start" targetRef="staff_decision" name="" />
    <bpmn:sequenceFlow id="staff_Flow_1" sourceRef="staff_decision" targetRef="staff_action" name="" />
    <bpmn:sequenceFlow id="staff_Flow_2" sourceRef="staff_action" targetRef="staff_save" name="" />
    <bpmn:sequenceFlow id="staff_Flow_3" sourceRef="staff_save" targetRef="staff_send" name="" />
    <bpmn:sequenceFlow id="staff_Flow_4" sourceRef="staff_send" targetRef="staff_end" name="" />
  </bpmn:process>
  <bpmn:process id="queue_Process_queue" name="Очередь observer и следующий владелец" isExecutable="false">
    <bpmn:documentation>{"notes": ["Описательная BPMN, isExecutable=false; Python побайтово сверён с Blockly.", "Этот processing не меняет заказ, не вызывает context API, не рассылает сообщения и не создаёт support Ticket.", "Reason локальный; таймер означает повтор проверки, не срок автоматического решения.", "Внешнее решение выполняет отдельный разрешённый actor/action-layer, не observer.", "Следующий статус и допустимость действия не выводятся из одного waiting reason."], "sources": [{"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "handlers/open_service_request_forcemajeure.py", "repository": "sharix-open-handlers-examples", "sha256": "d870ab96f80b4003b68c61e2dafd385d4db8bfc18baf32b5c9d271eb944762ab"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "generated_handler_blocks/open_service_request_forcemajeure.json", "repository": "sharix-open-handlers-examples", "sha256": "c31b6c3278a9a6caaca929db3358a3dcc21ec20b535c4e540e016e4d1ad9fbeb"}, {"commit": "76e0c693b628ed4a1fa34515a3f8abdff26149bb", "path": "catalog.py", "repository": "sharix-open-handlers-examples", "sha256": "e3dcb72b7e620e2837adacd7af053f35b04cdff475789496d9c114e17d57dfde"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/blockly_runtime.py", "repository": "sharix-open-handlers-backend", "sha256": "3e222150cbff315077c6c9b160d46e59856cedf6d6591d213e958c63cb2f2428"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/requesters.py", "repository": "sharix-open-handlers-backend", "sha256": "965a348cea477722bbaf4c8c6b06023eb238b71664a332f7ea8c90bfe72ea808"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_action_messages.py", "repository": "sharix-open-handlers-backend", "sha256": "046c262c0aabb02104fefca4e887324f99df22731e7726063f614aaf8839ca5c"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_blockly_codegen.py", "repository": "sharix-open-handlers-backend", "sha256": "bce71eab622922f8dd0954222842349799b60e18a0ab6310cc3e5f305603661e"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "ticket_codegen_contract.json", "repository": "sharix-open-handlers-backend", "sha256": "0bfd2b0ebb07bd380ed3c867386536ab88ef7dfa6e13f1cd8c91d32bb02c1ae9"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "lib/tickets.py", "repository": "sharix-open-tickets", "sha256": "0d260c17947f9a186d07af2749159780e3c7354a95b4bafe9d67493663c96883"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "api/handler_auth.py", "repository": "sharix-open-tickets", "sha256": "ac76dc45aaa9742e5e1da0b98aae914bb2e287048d33e97b4a245a6997bc8425"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "signals.py", "repository": "sharix-open-tickets", "sha256": "39aad8690a2e7d35cebfb052127a8130a951cbb4eea316c4f767a0a59fc5fa7e"}, {"commit": "fd64704d7d9f01a5ec5b7b89cbc5afe5102b2c14", "path": "services/handler_wakeup.py", "repository": "sharix-open-tickets", "sha256": "c9fdc62a18301fd7c075395c697d5b1c738c77713aa71fcbb5ab097e173d98de"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/handler_order_workflow.py", "repository": "sharix-open-backend", "sha256": "35624ded6e67110437a25dd07caef214a04251eb0136194ae939fa32fef17e84"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "apiviews/open_api.py", "repository": "sharix-open-backend", "sha256": "cb8fdda304d29c2cc5c0fc938759a13c60022871b7b93d77883d521820021ad3"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_handler_relay.py", "repository": "sharix-open-backend", "sha256": "e49a7876169403970d995af464357e2134af19a398372c55db2a5b40681d731e"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/handler_order_context.py", "repository": "sharix-open-backend", "sha256": "f3c0731e74d30dbe5e59bd53040a06ee108f14f7aad04771e65d741cffeb7179"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_workflow_policy.py", "repository": "sharix-open-backend", "sha256": "3266c6ecab490a0e19c8bbc02041387b86fe4b14068750e545ba9bde8bf51326"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_actions.py", "repository": "sharix-open-backend", "sha256": "27ce243408a46f1b700d94bf78a25c68ef21d51078bb03627174e4a424d82ef0"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_permissions.py", "repository": "sharix-open-backend", "sha256": "9c1636daa80c4da68c3ae5cf347e279127d142eeff91e969559e8bd54ca3d81d"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "urls.py", "repository": "sharix-open-backend", "sha256": "61ffd2f0563291da2dcc9488a5443cb5e2c0395108740a6700034cfd90548158"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_lifecycle.py", "repository": "sharix-open-backend", "sha256": "66dd2c4db9da3aaf90cb080946c1920a4f9953d62d1e6c9e224dd52564c4d661"}, {"commit": "778a3280cee115ba0efe3fdff7b0e708b0c10093", "path": "lib/order_provider_requirements.py", "repository": "sharix-open-backend", "sha256": "392f1f9180a098a4749b5fe5b7948e34530ccdb2befed646e538cdb7a5ddcada"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "core/order_rounds.py", "repository": "sharix-open-handlers-backend", "sha256": "e27a9190374c3888930f60e26686c11f69069bbbefd4511d21ad7267301321eb"}, {"commit": "50baf376e224d915a87d63240f3f339b3dda9afa", "path": "settings_schema.py", "repository": "sharix-open-handlers-backend", "sha256": "8ea8494405c6808834f4be7b171ffb8a969e1dd9b1654d36a8c21fbc9e3599c3"}]}</bpmn:documentation>
    <bpmn:laneSet id="queue_Lanes_queue">
      <bpmn:lane id="queue_Lane_worker" name="Событие или periodic reconciliation">
        <bpmn:flowNodeRef>queue_event</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>queue_scope</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>queue_wait</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>queue_remove</bpmn:flowNodeRef>
      </bpmn:lane>
    </bpmn:laneSet>
    <bpmn:startEvent id="queue_event" name="Получить смену состояния / сверить API">
      <bpmn:outgoing>queue_Flow_0</bpmn:outgoing>
      <bpmn:messageEventDefinition />
    </bpmn:startEvent>
    <bpmn:exclusiveGateway id="queue_scope" name="Ticket всё ещё в FORCEMAJEUER?">
      <bpmn:incoming>queue_Flow_0</bpmn:incoming>
      <bpmn:outgoing>queue_Flow_1</bpmn:outgoing>
      <bpmn:outgoing>queue_Flow_2</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:endEvent id="queue_wait" name="Продолжить наблюдение">
      <bpmn:incoming>queue_Flow_1</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:endEvent id="queue_remove" name="Удалить локальное состояние; дальше другой handler">
      <bpmn:incoming>queue_Flow_2</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="queue_Flow_0" sourceRef="queue_event" targetRef="queue_scope" name="" />
    <bpmn:sequenceFlow id="queue_Flow_1" sourceRef="queue_scope" targetRef="queue_wait" name="Да" />
    <bpmn:sequenceFlow id="queue_Flow_2" sourceRef="queue_scope" targetRef="queue_remove" name="Нет" />
  </bpmn:process>
  <bpmn:collaboration id="Collaboration_service_forcemajeure_external">
    <bpmn:participant id="staff_Pool_staff" name="Уполномоченный участник и канонический backend вне observer" processRef="staff_Process_staff" />
    <bpmn:participant id="queue_Pool_queue" name="Очередь observer и следующий владелец" processRef="queue_Process_queue" />
    <bpmn:messageFlow id="Message_service_forcemajeure_external_0" sourceRef="staff_send" targetRef="queue_event" name="Потеря сообщения не отменяет commit; reconcile восстанавливает состав" />
  </bpmn:collaboration>
  <bpmndi:BPMNDiagram id="Diagram_service_forcemajeure_external">
    <bpmndi:BPMNPlane id="Plane_service_forcemajeure_external" bpmnElement="Collaboration_service_forcemajeure_external">
      <bpmndi:BPMNShape id="staff_DI_Pool_staff" bpmnElement="staff_Pool_staff" isHorizontal="true">
        <dc:Bounds x="0.0" y="0.0" width="1840" height="200" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="staff_DI_Lane_worker" bpmnElement="staff_Lane_worker" isHorizontal="true">
        <dc:Bounds x="30.0" y="0.0" width="1810" height="200" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="staff_DI_start" bpmnElement="staff_start">
        <dc:Bounds x="132.0" y="82.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="staff_DI_decision" bpmnElement="staff_decision">
        <dc:Bounds x="365.0" y="65.0" width="150" height="70" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="staff_DI_action" bpmnElement="staff_action">
        <dc:Bounds x="675.0" y="65.0" width="150" height="70" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="staff_DI_save" bpmnElement="staff_save">
        <dc:Bounds x="985.0" y="65.0" width="150" height="70" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="staff_DI_send" bpmnElement="staff_send">
        <dc:Bounds x="1295.0" y="65.0" width="150" height="70" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="staff_DI_end" bpmnElement="staff_end">
        <dc:Bounds x="1662.0" y="82.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="staff_DI_Flow_0" bpmnElement="staff_Flow_0">
        <di:waypoint x="168.0" y="100.0" />
        <di:waypoint x="365.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="staff_DI_Flow_1" bpmnElement="staff_Flow_1">
        <di:waypoint x="515.0" y="100.0" />
        <di:waypoint x="675.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="staff_DI_Flow_2" bpmnElement="staff_Flow_2">
        <di:waypoint x="825.0" y="100.0" />
        <di:waypoint x="985.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="staff_DI_Flow_3" bpmnElement="staff_Flow_3">
        <di:waypoint x="1135.0" y="100.0" />
        <di:waypoint x="1295.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="staff_DI_Flow_4" bpmnElement="staff_Flow_4">
        <di:waypoint x="1445.0" y="100.0" />
        <di:waypoint x="1662.0" y="100.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="queue_DI_Pool_queue" bpmnElement="queue_Pool_queue" isHorizontal="true">
        <dc:Bounds x="0.0" y="650.0" width="910" height="440" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="queue_DI_Lane_worker" bpmnElement="queue_Lane_worker" isHorizontal="true">
        <dc:Bounds x="30.0" y="650.0" width="880" height="440" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="queue_DI_event" bpmnElement="queue_event">
        <dc:Bounds x="132.0" y="732.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="queue_DI_scope" bpmnElement="queue_scope">
        <dc:Bounds x="415.0" y="725.0" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="queue_DI_wait" bpmnElement="queue_wait">
        <dc:Bounds x="732.0" y="732.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="queue_DI_remove" bpmnElement="queue_remove">
        <dc:Bounds x="422.0" y="972.0" width="36" height="36" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="queue_DI_Flow_0" bpmnElement="queue_Flow_0">
        <di:waypoint x="168.0" y="750.0" />
        <di:waypoint x="415.0" y="750.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="queue_DI_Flow_1" bpmnElement="queue_Flow_1">
        <di:waypoint x="465.0" y="750.0" />
        <di:waypoint x="732.0" y="750.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="queue_DI_Flow_2" bpmnElement="queue_Flow_2">
        <di:waypoint x="440.0" y="775.0" />
        <di:waypoint x="440.0" y="972.0" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="DI_Message_service_forcemajeure_external_0" bpmnElement="Message_service_forcemajeure_external_0">
        <di:waypoint x="1370" y="135" />
        <di:waypoint x="1370" y="550" />
        <di:waypoint x="150" y="550" />
        <di:waypoint x="150" y="732" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="200" y="510" width="260" height="42" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>

Разрешённый внешний actor изучает актуальный заказ и использует предусмотренный action-layer с проверкой прав и области компании/объекта. В backend есть отдельное staff-действие change_status, защищённое user_can_change_order_status и каноническим переходом. Это не право observer произвольно менять стадию и не инструкция назначить любую целевую стадию без проверки её смысла и допустимости.

Выбор дальнейшего пути зависит от причины проблемы, назначения исполнителя и текущего состояния заказа. Этот processing не содержит обязательного перехода в следующую стадию, срока закрытия или схемы компенсации. Сама публикация BPMN не создаёт workflow урегулирования на сервере.

После commit ticket.changed/ticket.moved адресуют актуальному и прежнему владельцам; доставка события не является бизнес-commit. При её потере periodic reconciliation по INTERVAL_TIME_BD_REQ восстанавливает очереди. Следующий handler продолжает только предусмотренный для сохранённого статуса сценарий.

Не смешивать с PRE_FORCEMAJEUER

Технические имена статусов сохраняют написание FORCEMAJEUER и PRE_FORCEMAJEUER. Предыдущий observer тоже только ждёт; цепочка двух observer сама по себе не переводит заказ сюда автоматически. Источник текущего FORCEMAJEUER следует устанавливать по истории разрешённых изменений, а не предполагать срабатывание таймера. Этот handler не выполняет автоматический CLOSED и не обещает платёжную компенсацию.

Настройки и диагностика

Назначение Источник
Повтор наблюдения SERVICE_REQUEST_FORCEMAJEURE_RECHECK_SECONDS
Локальная причина ожидания force_majeure_resolution
Сверка состава очереди INTERVAL_TIME_BD_REQ
Общие ошибки runtime DEFERRED_TICKET_RECHECK_SECONDS, processing_error

Каталог выдаёт SERVICE_OBSERVE_CAPABILITIES: ticket.read, ticket.support.create и order.context. Но эти capability не равны исполнению: текущий processing не вызывает создание support Ticket или чтение order context, generic ticket.transition отсутствует. Нельзя утверждать, что заявка поддержки уже создана лишь из-за наличия такого capability.

Проверяйте фактический Ticket/Orders, источник проблемной стадии, текущий provider, наличие отдельного ответственного и результата внешнего action. Отсутствие письма/сообщения здесь не является потерей предусмотренной рассылки: такой отправки в processing нет. Если требуется автоматическое создание обращения, уведомление или переход, сначала нужен явный согласованный контракт и отражение поведения в Blockly/генерируемом Python; добавление текста Wiki этого не реализует.

Проверенные источники

Git SHA/SHA-256 и модели закреплены в metadata/BPMN; упаковка повторно сверяет файлы. Handler и бизнес-API при анализе не исполнялись. Общий автоматический hook Wiki пока не завершён.

Связанные материалы

sharixopen/knowledge/scenarios/service_request_forcemajeure.1793222809.txt.gz · Последнее изменение: — sx_knowledge_api_open

© 2022 ShariX