| Следующая версия | Предыдущая версия |
| sharixopen:knowledge:scenarios:service_request_done [2026/10/28 21:21] – [sharixknowledge] approved package sx_knowledge_api_open | sharixopen:knowledge:scenarios:service_request_done [2026/10/31 11:25] (текущий) – [sharixknowledge] approved package sx_knowledge_api_open |
|---|
| "ShariXKnowledgeOpenKnowledgeModulesHandlers", | "ShariXKnowledgeOpenKnowledgeModulesHandlers", |
| "ShariXKnowledgeScenarios" | "ShariXKnowledgeScenarios" |
| | ], |
| | "depends_on": [ |
| | "ShariXKnowledgeOpenKnowledgeDomainOrderticket", |
| | "ShariXKnowledgeOpenKnowledgeModulesHandlers" |
| ] | ] |
| }, | }, |
| "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", |
| "DONE", | "audience_support", |
| "CLOSED", | "audience_integrator", |
| "payment", | "audience_reviewer", |
| "BPMN" | "audience_ai", |
| | "product_sharix_open", |
| | "material_scenario", |
| | "topic_orders_payments", |
| | "topic_orders_lifecycle", |
| | "service_request", |
| | "ticket_done", |
| | "ticket_closed", |
| | "payment_state", |
| | "bpmn", |
| | "order", |
| | "ticket" |
| ] | ] |
| }, | }, |
| "payment": "423a6991dee4f350c2f333f2bd1f0355786f3f6fd791112e3cdf4e59dcbfc26b" | "payment": "423a6991dee4f350c2f333f2bd1f0355786f3f6fd791112e3cdf4e59dcbfc26b" |
| } | } |
| | }, |
| | "classification": { |
| | "schema": "sharix.knowledge.classification.v1", |
| | "products": [ |
| | "sharix_open" |
| | ], |
| | "audiences": [ |
| | "developer", |
| | "support", |
| | "integrator", |
| | "reviewer", |
| | "ai" |
| | ], |
| | "material": "scenario", |
| | "topics": [ |
| | "orders/payments", |
| | "orders/lifecycle" |
| | ], |
| | "tag_terms": [ |
| | "audience_developer", |
| | "audience_support", |
| | "audience_integrator", |
| | "audience_reviewer", |
| | "audience_ai", |
| | "product_sharix_open", |
| | "material_scenario", |
| | "topic_orders_payments", |
| | "topic_orders_lifecycle", |
| | "service_request", |
| | "ticket_done", |
| | "ticket_closed", |
| | "payment_state", |
| | "bpmn", |
| | "order", |
| | "ticket" |
| | ], |
| | "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": "a1a92c1cbf6725f4bb7939f96a423e6fea603419a1b894dcc5b8951d262a593e", | "content_sha256": "1640bd75f0901467edbbfb6dc00633aec4a13afb1f384adb7d24344bb64382f0", |
| "schema": 1 | "schema": 1 |
| } | } |
| ~~NOCACHE~~ | ~~NOCACHE~~ |
| |
| **Область:** ShariX Open. **Обработчик:** ''open_service_request_done'', тип ''SERVICE_REQUEST'' (2), статус ''DONE''. Проверено 29.10.2026: опубликованный Python побайтово совпадает с результатом канонического renderer Blockly workspace. Реальная выбранная версия и платёжный backend установки проверяются отдельно. | **Назначение:** [[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#integrator|Интегратор]] · [[sharixopen:knowledge:classification:audiences#recenzent_i_prijomschik|Рецензент и приёмщик]] · [[sharixopen:knowledge:classification:audiences#nejroset|Нейросеть]]. |
| | |
| | **Темы:** [[sharixopen:knowledge:classification:topics#finalizacija_oplaty|Заказы → Финализация оплаты]] · [[sharixopen:knowledge:classification:topics#zhiznennyj_cikl|Заказы → Жизненный цикл]]. |
| | |
| | |
| | |
| | **Область:** ShariX Open. **Обработчик:** ''open_service_request_done'', тип ''SERVICE_REQUEST'' (2), статус ''DONE''. 31.10.2026 опубликованные исходники повторно получены из Git. Обе Python-копии заново сопоставлены с результатом генерации Blockly; проверены 11 исходников генераторов. Сам handler не исполнялся. Выбранную версию, конфигурацию и внешние подключения сервера проверяют отдельно. |
| |
| ===== Назначение и границы ===== | ===== Назначение и границы ===== |
| Работа по заказу уже завершена. Handler повторяет платёжную финализацию и отдельно проверяет возможность перевести Ticket **DONE→CLOSED**. Он не просит исполнителя снова выполнить работу, не повторяет round finish, не пересчитывает фактическое окончание и не создаёт следующий повторный заказ своим processing. | Работа по заказу уже завершена. Handler повторяет платёжную финализацию и отдельно проверяет возможность перевести Ticket **DONE→CLOSED**. Он не просит исполнителя снова выполнить работу, не повторяет round finish, не пересчитывает фактическое окончание и не создаёт следующий повторный заказ своим processing. |
| |
| DONE, успешный результат платёжного retry и разрешение закрытия — разные состояния. BPMN описательные, ''isExecutable=false''; исполняется выбранный проверенный Python, сгенерированный из Blockly, а не схема Wiki. | Здесь нужно различать: |
| | |
| | * **DONE** — работа по заказу завершена; |
| | * **Результат платёжного retry** — ответ конкретной попытки финализации; |
| | * **Разрешение закрытия** — самостоятельный gate перед DONE → CLOSED. |
| | |
| | BPMN описательные, isExecutable=false. Runtime исполняет выбранный Python, сгенерированный из Blockly; схема Wiki процесс не запускает. |
| |
| ===== Порядок вызовов (BPMN) ===== | ===== Порядок вызовов (BPMN) ===== |
| </sharix-bpmn> | </sharix-bpmn> |
| |
| При своём статусе последовательно выполняются ''retry_done_payment'' и ''close_after_done''. Boolean-результат первого вызова **не используется для ветвления**. Даже после обработанного retry success=false handler пробует закрытие: решающее условие проверяет отдельный gate. | В своём статусе handler выполняет: |
| | |
| | - Вызвать ''retry_done_payment''. |
| | - Если первый вызов не бросил исключение — вызвать ''close_after_done''. |
| | - При success=true у close — завершить локальную обработку. |
| | - При неуспешном close — сохранить payment_finalization и defer по SERVICE_REQUEST_DONE_PAYMENT_RETRY_SECONDS. |
| | |
| | Boolean первого вызова не выбирает следующую ветвь: обработанный retry success=false не запрещает попытку close. Решающее условие проверяет отдельный backend gate. |
| |
| Если close возвращает success=true, runtime локально устанавливает CLOSED, очищает waiting reason и исключает Ticket из очереди. Иначе записывает ''payment_finalization'' и назначает defer по ''SERVICE_REQUEST_DONE_PAYMENT_RETRY_SECONDS''. | Если close возвращает success=true, runtime локально устанавливает CLOSED, очищает waiting reason и исключает Ticket из очереди. Иначе записывает ''payment_finalization'' и назначает defer по ''SERVICE_REQUEST_DONE_PAYMENT_RETRY_SECONDS''. |
| |
| Исключение API/транспорта первого вызова прерывает проход, поэтому close после него в том же проходе не выполняется. Исключение второго вызова также идёт в общий processing_error. Это отличается от штатного доменного «оплата ещё не завершена», допускающего обычный повтор. | Обработанный ответ и исключение имеют разные последствия: |
| | |
| | * **Первый вызов бросил исключение:** close в этом проходе не выполняется; ошибка идёт в общий processing_error. |
| | * **Второй вызов бросил исключение:** общий processing_error. |
| | * **Доменный close не разрешён:** обычное ожидание финализации с именованным повтором. |
| |
| В processing нет отдельной загрузки order context и нет раунда ответа: каждый backend action самостоятельно проверяет текущий scope и заказ. При чужом локальном статусе handler запрашивает удаление из очереди и комнаты. | В processing нет отдельной загрузки order context и нет раунда ответа: каждый backend action самостоятельно проверяет текущий scope и заказ. При чужом локальном статусе handler запрашивает удаление из очереди и комнаты. |
| Defer освобождает worker; событие может сделать Ticket ready раньше. Причина payment_finalization — локальное состояние, не отдельное поле оплаченности в БД. После успешного close причина очищается. Backend commit и доставка wakeup разделены: потеря ticket.changed/ticket.moved не откатывает CLOSED, periodic reconciliation восстанавливает состав очереди. | Defer освобождает worker; событие может сделать Ticket ready раньше. Причина payment_finalization — локальное состояние, не отдельное поле оплаченности в БД. После успешного close причина очищается. Backend commit и доставка wakeup разделены: потеря ticket.changed/ticket.moved не откатывает CLOSED, periodic reconciliation восстанавливает состав очереди. |
| |
| При диагностике сначала прочитайте фактический DONE/CLOSED, затем отдельно результат retry и причину блокировки close. Auth/transport/5xx не приравнивайте к ожидаемому платёжному ожиданию. Не меняйте Ticket вручную на CLOSED лишь ради снятия очереди и не повторяйте finish, если работа уже DONE. Повтор платёжного действия после неопределённого ответа требует сверки в каноническом платёжном состоянии, а не предположения по журналу handler. | Порядок диагностики: |
| | |
| | - Прочитать фактический Ticket: DONE или CLOSED. |
| | - Отдельно записать результат retry-done-payment. |
| | - Прочитать ответ close-after-done и причину блокировки gate. |
| | - Если ответ записи был неопределённым — сверить каноническое платёжное состояние до повтора. |
| | |
| | Auth/transport/5xx не приравнивают к ожидаемому платёжному ожиданию. Не менять Ticket на CLOSED ради снятия очереди и не повторять finish уже выполненной работы. |
| |
| ===== Проверенные источники ===== | ===== Проверенные источники ===== |