{"id":426866,"date":"2024-07-23T09:00:17","date_gmt":"2024-07-23T09:00:17","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=426866"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=426866","title":{"rendered":"<span>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 camunda<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0420\u0435\u043d\u0430\u0442 \u0414\u0430\u0441\u0430\u0435\u0432 \u0438 \u0432\u00a0\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/moex\/articles\/762078\/\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u04152\u0415\u2011\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043a\u0432\u043e\u0437\u043d\u044b\u0445 \u0411\u041f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430<\/a>\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e e2e\u2011\u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/camunda.com\/\">camunda<\/a> \u0432\u00a0\u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441\u2011\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (\u0434\u0430\u043b\u0435\u0435 \u0411\u041f). \u041d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e\u00a0\u0438 \u043a\u0430\u043a\u00a0\u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u00a0\u0441\u0432\u043e\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u00a0\u0434\u0432\u0438\u0436\u043a\u0435 camunda \u0438 \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u043e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u00a0\u0411\u041f \u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u0411\u0438\u0440\u0436\u0438 \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0426\u0423\u041f,\u00a0\u2014 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 <a href=\"https:\/\/habr.com\/ru\/companies\/moex\/articles\/816175\/\">\u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0438<\/a>. <\/p>\n<h2>2. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0411\u041f \u0432 camunda \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0432 \u0445\u043e\u0434\u0435 \u0411\u041f. <\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p> gateway, boundary events \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0432\u0438\u0433\u0430\u044e\u0442 \u0411\u041f \u0432\u00a0\u043d\u0443\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u0448\u0430\u0433\u0430\u0445 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u00a0\u2014 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u00a0\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 events\/gateway;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f service\u2011\u0442\u0430\u0441\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f user\u2011\u0442\u0430\u0441\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u00a0\u0448\u0430\u0433\u0430\u0445, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438\u00a0\u2014 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 (\u0432 e2e \u043d\u0435\u0442 \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u043c\u0438);<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u00absuccess path\u00bb, \u043d\u043e\u00a0\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u00a0\u0441\u0445\u0435\u043c\u0435, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0433\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u00a0\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u00a0\u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0445\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c. <\/p>\n<h2>3. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 bpmn \u2013 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438<\/h2>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/companies\/moex\/articles\/762078\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c python-\u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 (\u043a\u043b\u0438\u0435\u043d\u0442\u044b) \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438\/\u0434\u0432\u0438\u0436\u043a\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 bpmn-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<ul>\n<li>\n<p>moex-pmh-bpmn (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 bpmn-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438);<\/p>\n<\/li>\n<li>\n<p>moex-pmh-camunda-client (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 <a href=\"https:\/\/docs.camunda.org\/rest\/camunda-bpm-platform\/7.19\/\">camunda rest api<\/a>);<\/p>\n<\/li>\n<li>\n<p>moex-pmh-&lt;\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435_\u0411\u041f> (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u043c \u0411\u041f, \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e 1 \u0442\u0430\u043a\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e).<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<p>moex-pmh-&lt;\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435_\u0411\u041f> \u2192 moex\u2011pmh\u2011bpmn \u2192 moex-pmh-camunda-client. <\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c pypi-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0438 \u043b\u044e\u0431\u0430\u044f \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 (\u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u0447\u0438, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a) \u0447\u0435\u0440\u0435\u0437 merge-request.<\/p>\n<p>\u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <strong>moex-pmh-camunda-client<\/strong> \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>Decision Definition<\/p>\n<\/li>\n<li>\n<p>Execution<\/p>\n<\/li>\n<li>\n<p>External task<\/p>\n<\/li>\n<li>\n<p>Job<\/p>\n<\/li>\n<li>\n<p>Job Definition<\/p>\n<\/li>\n<li>\n<p>Historic Process Instance<\/p>\n<\/li>\n<li>\n<p>Historic Variable Instance<\/p>\n<\/li>\n<li>\n<p>Incident<\/p>\n<\/li>\n<li>\n<p>Process Definition<\/p>\n<\/li>\n<li>\n<p>Process Instance<\/p>\n<\/li>\n<li>\n<p>Task<\/p>\n<\/li>\n<li>\n<p>Variable Instance<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0430\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435. \u041d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0411\u041f.<\/p>\n<h2>4. \u0421\u0442\u0430\u0440\u0442 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e\u0438\u0441\u043a \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 camunda.<\/h2>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0411\u041f \u0434\u0432\u0438\u0436\u043e\u043a camunda \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 http\u00a0\u2014 https:\/\/&lt;\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439_\u0434\u043e\u043c\u0435\u043d>\/&lt;camunda>. \u0421 \u044d\u0442\u0438\u043c endpoint \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0411\u041f.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0411\u041f, \u2014 \u044d\u0442\u043e \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0442. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0445\u043e\u0434\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0448\u0438\u043d\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, esb (enterprise service bus);<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0411\u0414 \u0441\u0435\u0440\u0432\u0438\u0441\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0434\u0430\u0442\u044b \u0438\/\u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0438\u0441\u0435\u043c, \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0411\u041f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044d\u0442\u043e\u0442 \u0441\u0442\u0430\u0440\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445. \u0415\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u0430\u043a\u0438\u043c \u043a\u0430\u043a \u0431\u0438\u0437\u043d\u0435\u0441-\u043a\u043b\u044e\u0447 (business_key), \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 (securityid) \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c, \u043f\u0440\u0438\u0441\u0443\u0449\u0438\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0411\u041f. \u0412 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0434\u0430\u0442\u0435 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443 \u043f\u043e \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0435\u0433\u043e camunda, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u0414\u0430\u043b\u0435\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0411\u041f \u00ab\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430 \u0446\u0435\u043d\u043d\u043e\u0439 \u0431\u0443\u043c\u0430\u0433\u0438\u00bb (\u0432\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u00a0\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0432\u044b\u043a\u0443\u043f\u0430). \u042d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0441\u0445\u0435\u043c, \u0447\u0442\u043e\u00a0\u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438. \u0412 99% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u0445\u0435\u043c\u044b \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u00a0\u043e\u0431\u044a\u0435\u043c\u0443 \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 1 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0411\u041f \u0438\u0437 camunda:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/3d2\/7c4\/f60\/3d27c4f604b298fd9ffd475cbdea91e9.jpg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0421\u0445\u0435\u043c\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u201c\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u201d\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0421\u0445\u0435\u043c\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u201c\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u201d\" width=\"2029\" height=\"675\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3d2\/7c4\/f60\/3d27c4f604b298fd9ffd475cbdea91e9.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0421\u0445\u0435\u043c\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u201c\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u201d<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>secuirtyId<\/strong> (\u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430). \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 2 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u00ab\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u00bb \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f:  <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/a78\/1db\/4ea\/a781db4ea528effd858a595c8c59ca1b.jpg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0411\u041f \u201c\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u201d \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId   \" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0411\u041f \u201c\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u201d \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId   \" width=\"2064\" height=\"1120\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a78\/1db\/4ea\/a781db4ea528effd858a595c8c59ca1b.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0411\u041f \u00ab\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u00bb \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId   <\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0435\u0434\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>secuirtyId<\/strong>:<\/p>\n<pre><code class=\"python\">def wait_for_process_instance_by_security_id(     self,     security_id: str,     *,     max_time: int = 180,     sleep_time: float = 2.0, ) -> CamundaProcessInstance:     with allure.step(         f'\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" '         f'\u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId=\"{security_id}\"',     ):         return poll_by_time_first_success(             fn=lambda: self.get_process_instance_by_security_id(security_id),             checker=lambda p: p is not None,             max_time=max_time,             sleep_time=sleep_time,         )<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 <em>max_time<\/em> (120 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0441 \u0448\u0430\u0433\u043e\u043c \u0432 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0432 \u0446\u0438\u043a\u043b\u0435 (\u043f\u043e\u043b\u043b\u0438\u043d\u0433) \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (<em>get_process_variable_instances<\/em>) \u0438 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">def get_process_instance_by_security_id(     self,     security_id: str, ) -> Optional[CamundaProcessInstance]:     with allure.step(         f'\u041f\u043e\u0438\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \"{self.pretty_name}\" '         f'\u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId=\"{security_id}\"',     ):         processes = self.camunda.get_process_instances()         for process in processes:             variables = self.camunda.get_process_variable_instances(process.id) or {}             if 'securityId' not in variables:                 continue             v_security_id = variables.get('securityId').value             if v_security_id == security_id:                 return process<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0448\u0435\u043b\u0441\u044f, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0430\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430 <strong><em>CamundaProcessInstance<\/em>, <\/strong>\u043b\u0438\u0431\u043e<strong> <em>None<\/em><\/strong>. <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 <strong><em>CamundaProcessInstance<\/em><\/strong> \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"python\">id='007f5c67-44c4-11ef-b669-b2d4f57bb43f' rootProcessInstanceId='007f5c67-44c4-11ef-b669-b2d4f57bb43f' superProcessInstanceId=None superCaseInstanceId=None caseInstanceId=None processDefinitionName='\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u044b\u043a\u0443\u043f\u0430' processDefinitionKey='bp-offer-activation' processDefinitionVersion=7 processDefinitionId='bp-offer-activation:7:b99a97ae-17e5-11ee-971d-7ef2aaea4619' businessKey='bpms\/offersreg\/1\/1\/RUTEST48KTEP\/5623' startTime=datetime.datetime(2024, 7, 18, 8, 10, 8, 440000) endTime=None removalTime=None durationInMillis=None startUserId=None startActivityId='StartEvent_1' deleteReason=None tenantId=None state=&lt;ProcessInstanceState.ACTIVE: 'ACTIVE'><\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u043b\u043b\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u0437\u0430 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong><em>max_time<\/em><\/strong>, \u0442\u043e \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <strong><em>TimeoutError<\/em><\/strong> \u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c.<\/p>\n<h2>5. \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e bpmn-\u0441\u0445\u0435\u043c\u0435<\/h2>\n<p>\u0412\u0430\u0436\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e camunda-\u0441\u0445\u0435\u043c\u0435. \u042d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ul>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 gateway\/boundary\/events;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0435\u0440\u0432\u0438\u0441-\u0442\u0430\u0441\u043a\u0438 (service-tasks);<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 (user-tasks);<\/p>\n<\/li>\n<li>\n<p>\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\/\u0448\u0438\u043d\u0430\u043c\u0438\/\u043f\u043e\u0447\u0442\u043e\u0432\u044b\u043c\u0438 \u044f\u0449\u0438\u043a\u0430\u043c\u0438\/\u0441\u0430\u0439\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0411\u041f \u043f\u043e \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0432\u044b\u043a\u0443\u043f\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u00ab\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u043a\u0443 \u0415\u041a\u0411\u0414 \u0441\u00a0ASTS\u00bb (<strong>\u0415\u041a\u0411\u0414<\/strong> \u2013 \u0415\u0434\u0438\u043d\u0430\u044f \u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0411\u0430\u0437\u0430 \u0414\u0430\u043d\u043d\u044b\u0445, <strong>ASTS<\/strong>\u00a0\u2014 Automated Securities Trading System).<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c id \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u0432 camunda. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c bpmn-\u0444\u0430\u0439\u043b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0411\u041f \u0432 <a href=\"https:\/\/camunda.com\/download\/modeler\/\">camunda modeler<\/a> \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0448\u0430\u0433 (\u0441\u043c. \u0440\u0438\u0441\u0443\u043d\u043e\u043a 3):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/a89\/c56\/1b1\/a89c561b195786d78f5eabf9beaced22.jpg\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0442\u0430\u0441\u043a\u0430 \u201c\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u043a\u0443 \u0415\u041a\u0411\u0414 \u0441 ASTS) \u0432 camunda modeler\u201d   \" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0442\u0430\u0441\u043a\u0430 \u201c\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u043a\u0443 \u0415\u041a\u0411\u0414 \u0441 ASTS) \u0432 camunda modeler\u201d   \" width=\"2473\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a89\/c56\/1b1\/a89c561b195786d78f5eabf9beaced22.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0442\u0430\u0441\u043a\u0430 \u201c\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u043a\u0443 \u0415\u041a\u0411\u0414 \u0441 ASTS) \u0432 camunda modeler\u201d   <\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u043c id = compare-offers-manual. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0411\u041f. <\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043f\u043e\u043b\u043b\u0438\u043d\u0433\u043e\u043c (<em>waitforprocess_activity<\/em>):<\/p>\n<pre><code class=\"python\">def wait_for_process_activity(     self,     process_instance_id: str,     *,     activity_name: Optional[str] = None,     activity_id: Optional[str] = None,     max_time: int = 30,     sleep_time: int = 2, ) -> None:     moex_asserts.assert_true(         expr=(activity_name or activity_id) and not (activity_name and activity_id),         msg='\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 [activity_name, activity_id]',     )     kwargs = (         {'activity_name': activity_name}         if activity_name else {'activity_id': activity_id}     )     with allure.step(         f'\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" '         f'\u0441 id \"{process_instance_id}\" \u0434\u043e\u0448\u0435\u043b \u0434\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 '         f'\"{activity_name or activity_id}\"',     ):         poll_by_time_first_success(             fn=lambda: self.find_process_activity(                 process_instance_id=process_instance_id,                 **kwargs,             ),             checker=lambda a: a is not None,             max_time=max_time,             sleep_time=sleep_time,             msg=(                 f'\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" \u0441 id \"{process_instance_id}\" '                 f'\u043d\u0435 \u0434\u043e\u0448\u0435\u043b \u0434\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \"{activity_id or activity_name}\"'             ),         )<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 (<em>find_process_activity):<\/em><\/p>\n<pre><code class=\"python\">def find_process_activity(     self,     process_instance_id: str,     *,     activity_name: Optional[str] = None,     activity_id: Optional[str] = None, ) -> Optional[CamundaActivity]:     moex_asserts.assert_true(         expr=(activity_name or activity_id) and not (activity_name and activity_id),         msg='\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 [activity_name, activity_id]',     )     with allure.step(         f'\u041f\u043e\u0438\u0441\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \"{activity_name or activity_id}\" '         f'\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \"{self.pretty_name}\" \u0441 id \"{process_instance_id}\"',     ):         for activity in self.get_process_activities(process_instance_id):             if activity_name:                 if activity.activityName == activity_name:                     return activity             elif activity_id:                 if activity.activityId == activity_id:                     return activity<\/code><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 <em>find_process_activity()<\/em> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>get_process_activities()<\/em> (\u0432\u043d\u0443\u0442\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f camunda api &#8212; <em>\/process-instance\/{process_instance_id}\/activity-instances<\/em>) \u0438 \u0438\u0449\u0435\u043c \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043d\u0430\u0448 \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u043f\u043e <em>activity_id<\/em>\/<em>activity_name<\/em>:<\/p>\n<pre><code class=\"python\">def get_process_activities(self, process_instance_id: str) -> List[CamundaActivity]:     with allure.step(         f'\u041f\u043e\u0438\u0441\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \"{self.pretty_name}\" '         f'\u0441 id \"{process_instance_id}\"',     ):         base_activity = self.camunda.get_process_instance_activities(             process_instance_id,         )         child_activities = self.__get_process_activities(base_activity)         return child_activities<\/code><\/pre>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u0445 <strong><em>wait_for_process_activity<\/em><\/strong><em> <\/em>\u043b\u0438\u0448\u044c:<\/p>\n<ul>\n<li>\n<p><strong><em>process_instance_id<\/em><\/strong>=&lt;id_\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430> (\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0441\u0442\u0430\u0440\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430);<\/p>\n<\/li>\n<li>\n<p><strong><em>activity_id<\/em><\/strong>=\u2019 compare-offers-manual\u2019 (\u0438\u043b\u0438 <strong><em>activity_name<\/em><\/strong>).<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043e\u0439\u0434\u0435\u0442 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 <strong><em>max_time<\/em><\/strong> (\u043e\u0431\u044b\u0447\u043d\u043e 60 \u0441\u0435\u043a\u0443\u043d\u0434), \u0442\u043e \u043f\u043e\u043b\u043b\u0438\u043d\u0433 \u044d\u0442\u043e \u043e\u0442\u043b\u043e\u0432\u0438\u0442, \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0438, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u043f\u0435\u0440\u0435\u0434\u0430\u0441\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0442\u0435\u0441\u0442\u0435. \u0418\u043d\u0430\u0447\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c <strong><em>TimeoutError<\/em><\/strong>.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0442\u0435\u0441\u0442 \u043d\u0430\u0448\u0435\u043b activity \u0441 <strong><em>activity_id<\/em><\/strong><em>=\u2019 compare-offers-manual\u2019<\/em> \u0432 camunda, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 (user-tasks), \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0441 \u044d\u0442\u0438\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0443\u0436\u0435 \u0432 \u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0435 \u0417\u0430\u0434\u0430\u0447 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0426\u0423\u041f.<\/p>\n<p>\u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f id \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 camunda \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>wait_for_process_user_task()<\/em>:<\/p>\n<pre><code class=\"python\">def wait_for_process_user_task(     self,     process_instance_id: str,     *,     activity_name: Optional[str] = None,     activity_id: Optional[str] = None,     max_time: int = 30,     sleep_time: int = 2,     post_await_time: int = 3, ) -> CamundaTask:     moex_asserts.assert_true(         expr=(activity_name or activity_id) and not (activity_name and activity_id),         msg='\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 [activity_name, activity_id]',     )     kwargs = (         {'activity_name': activity_name}         if activity_name else {'activity_id': activity_id}     )     with allure.step(         f'\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \"{self.pretty_name}\" \u0441 id '         f'\"{process_instance_id}\" \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e \u0434\u0436\u043e\u0431\u0435'         f'\"{activity_id or activity_name}\"',     ):         task = poll_by_time_first_success(             fn=lambda: self.find_process_user_task(                 process_instance_id=process_instance_id,                 **kwargs,             ),             checker=lambda a: a is not None,             max_time=max_time,             sleep_time=sleep_time,             msg=(                 f'\u041f\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 {self.pretty_name} \u0441 id \"{process_instance_id}\" '                 '\u043d\u0435 \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e \u0434\u0436\u043e\u0431\u0435 '                 f'\"{activity_id or activity_name}\"'             ),         )         time.sleep(post_await_time)         return task<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043b\u043b\u0438\u043d\u0433\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>find_process_user_task()<\/em>:<\/p>\n<pre><code class=\"python\">def find_process_user_task(     self,     process_instance_id: str,     *,     activity_name: Optional[str] = None,     activity_id: Optional[str] = None, ) -> Optional[CamundaTask]:     moex_asserts.assert_true(         expr=(activity_name or activity_id) and not (activity_name and activity_id),         msg='\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 [activity_name, activity_id]',     )     with allure.step(         '\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u0434\u0436\u043e\u0431\u0435 '         f'\"{activity_id or activity_name}\" \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 '         f'\"{self.pretty_name}\" \u0441 id \"{process_instance_id}\"',     ):         if not activity_id:             activity_id = self.find_process_activity(                 process_instance_id=process_instance_id,                 activity_name=activity_name,             ).activityId         tasks = self.camunda.get_process_instance_tasks(             process_instance_id=process_instance_id,             activity_id=activity_id,         )         return tasks[0] if tasks else None<\/code><\/pre>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f POST-\u043c\u0435\u0442\u043e\u0434 <em>\/task<\/em>. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0441\u043f\u0435\u0445\u0430 (\u043d\u0430\u0448\u043b\u0430\u0441\u044c \u0442\u0430\u0441\u043a\u0430 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u0430\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430 <em>CamundaTask<\/em> \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438:<\/p>\n<pre><code class=\"python\">id='00977769-44c4-11ef-b669-b2d4f57bb43f' name='\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \"TEST-H9XQ8\" (RUTEST48KTEP) \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \"\u0412\u044b\u043a\u0443\u043f: \u0410\u0434\u0440\u0435\u0441\u043d\u044b\u0435 \u0437\u0430\u044f\u0432\u043a\u0438\"' assignee=None created='2024-07-18T08:10:08.598+0300' due='2024-07-18T23:59:59.647+0300' followUp=None, delegationState=None description='5623' executionId='007f5c67-44c4-11ef-b669-b2d4f57bb43f' owner=None parentTaskId=None priority=50 processDefinitionId='bp-offer-activation:7:b99a97ae-17e5-11ee-971d-7ef2aaea4619' processInstanceId='007f5c67-44c4-11ef-b669-b2d4f57bb43f' caseExecutionId=None caseDefinitionId=None caseInstanceId=None taskDefinitionKey='compare-offers-manual' suspended=False formKey=None camundaFormRef=None tenantId=None<\/code><\/pre>\n<p>\u0418\u0437 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 <em>id=&#8217;00977769-44c4-11ef-b669-b2d4f57bb43f&#8217;<\/em> \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0437\u0430\u0434\u0430\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0438 \u0432 \u0426\u0423\u041f. \u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432\u00a0\u0426\u0423\u041f \u0432\u00a0\u041c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0417\u0430\u0434\u0430\u0447, \u043d\u0430\u0439\u0442\u0438 \u0435\u0451 \u0432\u00a0\u0432\u044b\u0434\u0430\u0447\u0435 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0434 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u00ab\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c\u00bb \u0438\u043b\u0438 \u00ab\u041e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c\u00bb).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0432\u00a0\u0441\u0445\u0435\u043c\u0435, \u043d\u043e\u00a0\u044d\u0442\u043e\u0442 \u0448\u0430\u0433 \u043f\u0440\u043e\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u00a0\u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u00a0\u043f\u043e\u043b\u043b\u0438\u043d\u0433\u0435 \u0432\u00a0sleep_time (\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438) \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0438\u0437\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 0.3\u00a0\u0441\u0435\u043a\u0443\u043d\u0434\u044b. <\/p>\n<p>\u0415\u0441\u043b\u0438\u00a0\u0436\u0435 \u043f\u043e\u043b\u043b\u0438\u043d\u0433 \u043f\u043e\u00a0\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u043d\u0435\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0435\u0433\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c, \u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0432\u00a0\u0443\u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445.<\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0443\u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c <em>process_instance_id<\/em> \u0432  \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>get_historic_process_instance()<\/em>:<\/p>\n<pre><code class=\"python\">def get_historic_process_instance(     self,     process_instance_id: str, ) -> Optional[CamundaHistoricProcessInstance]:     url = f'{self.__url_prefix}\/history\/process-instance\/{process_instance_id}'     resp = self.__get(url=url)     return CamundaHistoricProcessInstance(**resp) if resp else None<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0443\u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>get_process_instance_historic_activities()<\/em>:<\/p>\n<pre><code class=\"python\">def get_process_instance_historic_activities(     self,     process_instance_id: str, ) -> List[CamundaHistoricActivity]:     url = f'{self.__url_prefix}\/history\/activity-instance'     resp = self.__get(url=url, params={'processInstanceId': process_instance_id})     return [CamundaHistoricActivity(**a) for a in resp]<\/code><\/pre>\n<p>\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0432\u0441\u0435\u0445 \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u043d\u0430\u0439\u0442\u0438 \u043d\u0443\u0436\u043d\u044b\u0439.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>get_historic_process_instance_variables()<\/em>:<\/p>\n<pre><code class=\"python\">def get_historic_process_instance_variables(     self,     process_instance_id: str, ) -> Optional[Dict[str, ProcessInstanceHistoricVariable]]:     url = f'{self.__url_prefix}\/history\/variable-instance'     params = {         'processInstanceId': process_instance_id,         'deserializeValues': 'false',     }     resp = self.__get(url=url, params=params)     return {         variable['name']: ProcessInstanceHistoricVariable(**variable)         for variable in resp     } if resp else None<\/code><\/pre>\n<h2>6. \u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u0430\u043c\u0438<\/h2>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0411\u041f, \u0433\u0434\u0435 \u0432 \u0441\u0445\u0435\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u0439\u043c\u0435\u0440\u044b. \u0421 \u0442\u0435\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0447\u0442\u043e \u0438\u043c\u0435\u043b\u0438 \u0434\u0435\u043b\u043e, \u0442\u0430\u0439\u043c\u0435\u0440, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0434\u0430\u0442\u044b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0411\u041f \u0432\u0441\u0442\u0430\u043b \u043d\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e camunda modeler, \u043d\u0430\u0445\u043e\u0434\u0438\u043c id \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u0438 \u0438\u0449\u0435\u043c \u044d\u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u043f\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 (\u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435). \u0427\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0439\u0442\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u043d\u043e \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043d\u0438\u043c (\u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438), \u0435\u0441\u043b\u0438 \u0442\u0430\u0439\u043c\u0435\u0440 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u0438\u0439 (> 30 \u0441\u0435\u043a).<\/p>\n<p>\u0414\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>pass_timer():<\/em><\/p>\n<pre><code class=\"python\">def pass_timer(     self,     *,     process_instance: Union[ProcessInstance, CamundaProcessInstance],     timer_id: Optional[str] = None,     job_type: Optional[str] = None, ) -> None:     if isinstance(process_instance, ProcessInstance):         process_instance_id = process_instance.processInstanceId     elif isinstance(process_instance, CamundaHistoricProcessInstance):         process_instance_id = process_instance.id     else:         process_instance_id = process_instance.id     timer_id = timer_id or self.TIMER_ID     job_type = job_type or self.TIMER_JOB_TYPE     with allure.step(         f'\u041f\u0440\u043e\u0431\u0440\u043e\u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 timer_id={timer_id} '         f'\u0438 job_type={job_type} \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \"{self.pretty_name}\" '         f'\u0441 id \"{process_instance_id}\"',     ):         timer_job = self.get_timer(             process_instance=process_instance,             timer_id=timer_id,             job_type=job_type,         )         self.camunda.execute_job_by_id(timer_job.id)         time.sleep(self.TIMER_AWAIT_TIME)<\/code><\/pre>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p><em>id<\/em> \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430;<\/p>\n<\/li>\n<li>\n<p><em>timer_id<\/em> (id \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438 \u043f\u043e \u0441\u0445\u0435\u043c\u0435 \u0432 camunda);<\/p>\n<\/li>\n<li>\n<p><em>job_type<\/em> (\u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u2018timer-intermediate-transition\u2019).<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0430\u0439\u043c\u0435\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u0430\u043a\u0442\u0438\u0432\u0438\u0442\u0438, \u0442\u043e \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>get_timer(), <\/em>\u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445<em> process_instance<\/em> \u0438 <em>timer_id<\/em> (\u043f\u043e \u0441\u0443\u0442\u0438<em> activity_id<\/em>), \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0438 <em>job_type<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0438\u043f\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u0439\u043c\u0435\u0440\u0430<br \/> (<em>timer-intermediate-transition<\/em> \u0438\u043b\u0438 <em>timer-transition<\/em>):<\/p>\n<pre><code class=\"python\">def get_timer(     self,     *,     process_instance: Union[ProcessInstance, CamundaProcessInstance],     timer_id: Optional[str] = None,     job_type: Optional[str] = None, ) -> Optional[CamundaJob]:     if isinstance(process_instance, ProcessInstance):         process_instance_id = process_instance.processInstanceId         process_definition_id = process_instance.processDefinitionId     elif isinstance(process_instance, CamundaHistoricProcessInstance):         process_instance_id = process_instance.id         process_definition_id = process_instance.processDefinitionId     else:         process_instance_id = process_instance.id         process_definition_id = process_instance.definitionId     timer_id = timer_id or self.TIMER_ID     job_type = job_type or self.TIMER_JOB_TYPE     with allure.step(         f'\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 timer_id={timer_id} '         f'\u0438 job_type={job_type} \u0434\u043b\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \"{self.pretty_name}\" '         f'\u0441 id \"{process_instance_id}\"',     ):         job_definition = self.camunda.get_job_definitions(             params={                 'activityIdIn': timer_id,                 'processDefinitionId': process_definition_id,                 'jobType': job_type,             },         )[0]         timer_job = self.camunda.get_jobs(             params={                 'jobDefinitionId': job_definition.id,                 'processInstanceId': process_instance_id,             },         )         return timer_job[0] if timer_job else None<\/code><\/pre>\n<p>\u041a\u0430\u043a \u043d\u0430\u0448\u043b\u0438 \u0442\u0430\u0439\u043c\u0435\u0440, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0435\u0433\u043e <em>execute_job_by_id()<\/em> \u2014 \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u0448\u0438\u0442 camunda-\u043c\u0435\u0442\u043e\u0434 <em>\u2018\/job\/{job_id}\/execute&#8217;<\/em>.<\/p>\n<h2>7. \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e\u0433\u043e \u0411\u041f \u043f\u043e camunda, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>\u0412\u0430\u0436\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0411\u041f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>wait_completed_process()<\/em>:<\/p>\n<pre><code class=\"python\">def wait_completed_process(     self,     process_instance_id: str,     *,     max_time: int = 30,     sleep_time: int = 2, ) -> None:     with allure.step(         f'\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" '         f'\u0441 id \"{process_instance_id}\" \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d',     ):         poll_by_time_first_success(             fn=lambda: self.__get_process_instance_with_incidents_check(                 process_instance_id,             ),             checker=lambda p: p is None,             max_time=max_time,             sleep_time=sleep_time,             msg=(                 f'\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" \u0441 id \"{process_instance_id}\" '                 f'\u043d\u0435 \u0431\u044b\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d \u0437\u0430 max_time = {max_time} \u0441\u0435\u043a\u0443\u043d\u0434'             ),         )<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043b\u0438\u043d\u0433 \u043f\u043e \u043c\u0435\u0442\u043e\u0434\u0443 __<em>get_process_instance_with_incidents_check()<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c <em>process_instance_id<\/em> \u043d\u0435\u0442 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432 (\u0432\u043d\u0443\u0442\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f GET \u043c\u0435\u0442\u043e\u0434 <em>\/incident<\/em>);<\/p>\n<\/li>\n<li>\n<p>\u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c <em>process_instance_id<\/em> \u0438\u0441\u0447\u0435\u0437 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 camunda.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442, \u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong><em>RuntimeError<\/em><\/strong>. \u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u0442\u0447\u0435\u0442 \u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043c\u043e\u0433 \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u0447\u0438\u043d\u0443 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0442\u0435\u0441\u0442\u0430. \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 4 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043e\u0442\u0447\u0435\u0442\u0430 \u0441 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b7e\/7e3\/239\/b7e7e323948d8a13353a5dcfbdf23b47.png\" alt=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0435 \u0411\u041f \u0432 allure-\u043e\u0442\u0447\u0435\u0442\u0435 \u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438\" title=\"\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0435 \u0411\u041f \u0432 allure-\u043e\u0442\u0447\u0435\u0442\u0435 \u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438\" width=\"974\" height=\"274\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b7e\/7e3\/239\/b7e7e323948d8a13353a5dcfbdf23b47.png\"\/><\/p>\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 4. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0435 \u0411\u041f \u0432 allure-\u043e\u0442\u0447\u0435\u0442\u0435 \u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 <strong>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a<\/strong> \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong>\u041d\u0415<\/strong> \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u043f\u043e\u043b\u043b\u0438\u043d\u0433\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432\u00a0\u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u00a0camunda \u043d\u0430\u00a0\u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0427\u0430\u0441\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u0441\u0442\u043e\u043c (setup) \u0438\u043b\u0438\u00a0\u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0433\u043e (teardown) \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u00a0\u2014 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u044b\u043f\u0430\u043b \u0432\u00a0\u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442 \u0438 \u00ab\u0432\u0438\u0441\u0438\u0442\u00bb \u0432\u00a0camunda). \u0414\u043b\u044f\u00a0\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>delete_process_instance_by_business_key()<\/em> (\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u043e business_key):<\/p>\n<pre><code class=\"python\">def delete_process_instance_by_business_key(     self,     business_key: str, ) -> None:     with allure.step(         f'\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \"{self.pretty_name}\" '         f'\u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u043a\u043b\u044e\u0447\u043e\u043c \"{business_key}\"',     ):         self.camunda.delete_process_instance(             process_instance_id=self.get_process_instance_by_business_key(                 business_key,             ).id,         )<\/code><\/pre>\n<p>\u0412 <em>delete_process_instance()<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f DELETE \u043c\u0435\u0442\u043e\u0434 \/<em>process-instance\/{process_instance_id}.<\/em><\/p>\n<p>\u0415\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0442 business_key. \u0422\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432 \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0432\u0441\u0435\u0445 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e <em>process_definition<\/em>.<\/p>\n<h2>8. \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u00a0\u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0411\u041f. \u0427\u0430\u0441\u0442\u044c \u0438\u0437\u00a0\u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u043e\u0442\u00a0\u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0447\u0442\u043e\u00a0\u0438 \u043c\u044b, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043a\u043e\u043c\u0443\u2011\u0442\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0438 \u0434\u0430\u0441\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0411\u041f \u0447\u0435\u0440\u0435\u0437 camunda. \u041f\u043e\u00a0\u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 5\u00a0\u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0411\u041f (\u043d\u0435 e2e), \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0441\u00a0\u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u0432\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 camunda \u043d\u0435\u00a0\u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438.<\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e \u043d\u0435\u00a0\u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 how\u2011to \u0438\u043b\u0438\u00a0\u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b \u043e\u0442\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430, \u043a\u0430\u043a\u00a0\u0432\u044b\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441\u2011\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0430\u00a0\u043b\u0438\u0448\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u00a0\u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445. \u0412\u00a0\u043d\u0430\u0448\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435 \u0432\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e, \u0434\u0430\u00a0\u0438 \u0441\u043c\u044b\u0441\u043b\u0430 \u0432\u00a0\u044d\u0442\u043e\u043c \u043d\u0435\u00a0\u043e\u0441\u043e\u0431\u043e \u043c\u043d\u043e\u0433\u043e. \u041e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 \u0432\u00a0\u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u043c\u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0411\u041f.<\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u044e \u0434\u043e\u00a0\u043a\u043e\u043d\u0446\u0430. \u0415\u0441\u043b\u0438 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043f\u0438\u0448\u0438\u0442\u0435 \u0438\u0445 \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445\u00a0\u2014 \u0441\u00a0\u0440\u0430\u0434\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0432\u0435\u0442\u0438\u043c! \u0414\u043e\u00a0\u043d\u043e\u0432\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/829532\/\"> https:\/\/habr.com\/ru\/articles\/829532\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0420\u0435\u043d\u0430\u0442 \u0414\u0430\u0441\u0430\u0435\u0432 \u0438 \u0432\u00a0\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/habr.com\/ru\/companies\/moex\/articles\/762078\/\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u04152\u0415\u2011\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043a\u0432\u043e\u0437\u043d\u044b\u0445 \u0411\u041f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430<\/a>\u00a0\u0431\u044b\u043b\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e e2e\u2011\u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/camunda.com\/\">camunda<\/a> \u0432\u00a0\u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441\u2011\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 (\u0434\u0430\u043b\u0435\u0435 \u0411\u041f). \u041d\u0430\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e\u00a0\u0438 \u043a\u0430\u043a\u00a0\u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u00a0\u0441\u0432\u043e\u0438\u0445 \u0442\u0435\u0441\u0442\u0430\u0445.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u00a0\u0434\u0432\u0438\u0436\u043a\u0435 camunda \u0438 \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u043e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u00a0\u0411\u041f \u041c\u043e\u0441\u043a\u043e\u0432\u0441\u043a\u043e\u0439 \u0411\u0438\u0440\u0436\u0438 \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0426\u0423\u041f,\u00a0\u2014 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 <a href=\"https:\/\/habr.com\/ru\/companies\/moex\/articles\/816175\/\">\u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u043b\u0435\u0433\u0438<\/a>. <\/p>\n<h2>2. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0411\u041f \u0432 camunda \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0432 \u0445\u043e\u0434\u0435 \u0411\u041f. <\/p>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a:<\/p>\n<ul>\n<li>\n<p>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e;<\/p>\n<\/li>\n<li>\n<p> gateway, boundary events \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u0432\u0438\u0433\u0430\u044e\u0442 \u0411\u041f \u0432\u00a0\u043d\u0443\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u00a0\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u044b\u0445 \u0448\u0430\u0433\u0430\u0445 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u00a0\u2014 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432\u00a0\u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 events\/gateway;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f service\u2011\u0442\u0430\u0441\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f user\u2011\u0442\u0430\u0441\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u00a0\u0448\u0430\u0433\u0430\u0445, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438\u00a0\u2014 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 (\u0432 e2e \u043d\u0435\u0442 \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043a, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f\u043c\u0438);<\/p>\n<\/li>\n<li>\n<p>\u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u00absuccess path\u00bb, \u043d\u043e\u00a0\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u00a0\u0441\u0445\u0435\u043c\u0435, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0433\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u00a0\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0432\u00a0\u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0445\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043d\u0430\u0440\u0430\u0432\u043d\u0435 \u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c. <\/p>\n<h2>3. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 bpmn \u2013 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438<\/h2>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/companies\/moex\/articles\/762078\/\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c python-\u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 (\u043a\u043b\u0438\u0435\u043d\u0442\u044b) \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438\/\u0434\u0432\u0438\u0436\u043a\u0430\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 bpmn-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<ul>\n<li>\n<p>moex-pmh-bpmn (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 bpmn-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438);<\/p>\n<\/li>\n<li>\n<p>moex-pmh-camunda-client (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 <a href=\"https:\/\/docs.camunda.org\/rest\/camunda-bpm-platform\/7.19\/\">camunda rest api<\/a>);<\/p>\n<\/li>\n<li>\n<p>moex-pmh-&lt;\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435_\u0411\u041f> (\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u043c \u0411\u041f, \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e 1 \u0442\u0430\u043a\u043e\u043c\u0443 \u043c\u043e\u0434\u0443\u043b\u044e).<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<p>moex-pmh-&lt;\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435_\u0411\u041f> \u2192 moex\u2011pmh\u2011bpmn \u2192 moex-pmh-camunda-client. <\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c pypi-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0438 \u043b\u044e\u0431\u0430\u044f \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443 \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435 (\u043d\u043e\u0432\u044b\u0435 \u0444\u0438\u0447\u0438, \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a) \u0447\u0435\u0440\u0435\u0437 merge-request.<\/p>\n<p>\u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0434\u0443\u043b\u044c <strong>moex-pmh-camunda-client<\/strong> \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>Decision Definition<\/p>\n<\/li>\n<li>\n<p>Execution<\/p>\n<\/li>\n<li>\n<p>External task<\/p>\n<\/li>\n<li>\n<p>Job<\/p>\n<\/li>\n<li>\n<p>Job Definition<\/p>\n<\/li>\n<li>\n<p>Historic Process Instance<\/p>\n<\/li>\n<li>\n<p>Historic Variable Instance<\/p>\n<\/li>\n<li>\n<p>Incident<\/p>\n<\/li>\n<li>\n<p>Process Definition<\/p>\n<\/li>\n<li>\n<p>Process Instance<\/p>\n<\/li>\n<li>\n<p>Task<\/p>\n<\/li>\n<li>\n<p>Variable Instance<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0430\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u043e\u0442\u0432\u0435\u0442\u0435. \u041d\u0438\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0411\u041f.<\/p>\n<h2>4. \u0421\u0442\u0430\u0440\u0442 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e\u0438\u0441\u043a \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 camunda.<\/h2>\n<p>\u0412 \u043b\u044e\u0431\u043e\u043c \u0411\u041f \u0434\u0432\u0438\u0436\u043e\u043a camunda \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0447\u0435\u0440\u0435\u0437 http\u00a0\u2014 https:\/\/&lt;\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439_\u0434\u043e\u043c\u0435\u043d>\/&lt;camunda>. \u0421 \u044d\u0442\u0438\u043c endpoint \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0445\u043e\u0434\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u0411\u041f.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0411\u041f, \u2014 \u044d\u0442\u043e \u0435\u0433\u043e \u0441\u0442\u0430\u0440\u0442. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0445\u043e\u0434\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439:<\/p>\n<ul>\n<li>\n<p>\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0448\u0438\u043d\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, esb (enterprise service bus);<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u0411\u0414 \u0441\u0435\u0440\u0432\u0438\u0441\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0434\u0430\u0442\u044b \u0438\/\u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u043f\u0438\u0441\u0435\u043c, \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0411\u041f \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044d\u0442\u043e\u0442 \u0441\u0442\u0430\u0440\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445. \u0415\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u0430\u043a\u0438\u043c \u043a\u0430\u043a \u0431\u0438\u0437\u043d\u0435\u0441-\u043a\u043b\u044e\u0447 (business_key), \u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 (securityid) \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c, \u043f\u0440\u0438\u0441\u0443\u0449\u0438\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0411\u041f. \u0412 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0434\u0430\u0442\u0435 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0443 \u043f\u043e \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u043d\u0430\u0439\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0435\u0433\u043e camunda, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u0414\u0430\u043b\u0435\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0411\u041f \u00ab\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430 \u0446\u0435\u043d\u043d\u043e\u0439 \u0431\u0443\u043c\u0430\u0433\u0438\u00bb (\u0432\u0445\u043e\u0434\u0438\u0442 \u0432\u00a0\u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u00a0\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438, \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0438 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0432\u044b\u043a\u0443\u043f\u0430). \u042d\u0442\u043e \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u0441\u0445\u0435\u043c, \u0447\u0442\u043e\u00a0\u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438. \u0412 99% \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u0445\u0435\u043c\u044b \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u00a0\u043e\u0431\u044a\u0435\u043c\u0443 \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438. \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 1 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0411\u041f \u0438\u0437 camunda:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 1. \u0421\u0445\u0435\u043c\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u201c\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u201d<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>secuirtyId<\/strong> (\u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430). \u041d\u0430 \u0440\u0438\u0441\u0443\u043d\u043a\u0435 2 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u00ab\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u00bb \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f:  <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 2. \u0417\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0411\u041f \u00ab\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0432\u044b\u043a\u0443\u043f\u0430\u00bb \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId   <\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0441\u0440\u0435\u0434\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>secuirtyId<\/strong>:<\/p>\n<pre><code class=\"python\">def wait_for_process_instance_by_security_id(     self,     security_id: str,     *,     max_time: int = 180,     sleep_time: float = 2.0, ) -> CamundaProcessInstance:     with allure.step(         f'\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" '         f'\u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId=\"{security_id}\"',     ):         return poll_by_time_first_success(             fn=lambda: self.get_process_instance_by_security_id(security_id),             checker=lambda p: p is not None,             max_time=max_time,             sleep_time=sleep_time,         )<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 <em>max_time<\/em> (120 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0441 \u0448\u0430\u0433\u043e\u043c \u0432 2 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0432 \u0446\u0438\u043a\u043b\u0435 (\u043f\u043e\u043b\u043b\u0438\u043d\u0433) \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (<em>get_process_variable_instances<\/em>) \u0438 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">def get_process_instance_by_security_id(     self,     security_id: str, ) -> Optional[CamundaProcessInstance]:     with allure.step(         f'\u041f\u043e\u0438\u0441\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \"{self.pretty_name}\" '         f'\u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 securityId=\"{security_id}\"',     ):         processes = self.camunda.get_process_instances()         for process in processes:             variables = self.camunda.get_process_variable_instances(process.id) or {}             if 'securityId' not in variables:                 continue             v_security_id = variables.get('securityId').value             if v_security_id == security_id:                 return process<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0448\u0435\u043b\u0441\u044f, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u0430\u0442\u0430\u043a\u043b\u0430\u0441\u0441\u0430 <strong><em>CamundaProcessInstance<\/em>, <\/strong>\u043b\u0438\u0431\u043e<strong> <em>None<\/em><\/strong>. <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 <strong><em>CamundaProcessInstance<\/em><\/strong> \u043e\u0431\u044a\u0435\u043a\u0442\u0430:<\/p>\n<pre><code class=\"python\">id='007f5c67-44c4-11ef-b669-b2d4f57bb43f' rootProcessInstanceId='007f5c67-44c4-11ef-b669-b2d4f57bb43f' superProcessInstanceId=None superCaseInstanceId=None caseInstanceId=None processDefinitionName='\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u044b\u043a\u0443\u043f\u0430' processDefinitionKey='bp-offer-activation' processDefinitionVersion=7 processDefinitionId='bp-offer-activation:7:b99a97ae-17e5-11ee-971d-7ef2aaea4619' businessKey='bpms\/offersreg\/1\/1\/RUTEST48KTEP\/5623' startTime=datetime.datetime(2024, 7, 18, 8, 10, 8, 440000) endTime=None removalTime=None durationInMillis=None startUserId=None startActivityId='StartEvent_1' deleteReason=None tenantId=None state=&lt;ProcessInstanceState.ACTIVE: 'ACTIVE'><\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u043b\u043b\u0438\u043d\u0433\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0441\u044f \u0437\u0430 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <strong><em>max_time<\/em><\/strong>, \u0442\u043e \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 <strong><em>TimeoutError<\/em><\/strong> \u0438 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c.<\/p>\n<h2>5. \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e bpmn-\u0441\u0445\u0435\u043c\u0435<\/h2>\n<p>\u0412\u0430\u0436\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e camunda-\u0441\u0445\u0435\u043c\u0435. \u042d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0448\u0430\u0433\u0438:<\/p>\n<ul>\n<li>\n<p>\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 gateway\/boundary\/events;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0435\u0440\u0432\u0438\u0441-\u0442\u0430\u0441\u043a\u0438 (service-tasks);<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 (user-tasks);<\/p>\n<\/li>\n<li>\n<p>\u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\/\u0448\u0438\u043d\u0430\u043c\u0438\/\u043f\u043e\u0447\u0442\u043e\u0432\u044b\u043c\u0438 \u044f\u0449\u0438\u043a\u0430\u043c\u0438\/\u0441\u0430\u0439\u0442\u0430\u043c\u0438 \u0438 \u043f\u0440\u043e\u0447\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0411\u041f \u043f\u043e \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0432\u044b\u043a\u0443\u043f\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u00ab\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u043a\u0443 \u0415\u041a\u0411\u0414 \u0441\u00a0ASTS\u00bb (<strong>\u0415\u041a\u0411\u0414<\/strong> \u2013 \u0415\u0434\u0438\u043d\u0430\u044f \u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0411\u0430\u0437\u0430 \u0414\u0430\u043d\u043d\u044b\u0445, <strong>ASTS<\/strong>\u00a0\u2014 Automated Securities Trading System).<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c id \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0433\u0430 \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u0432 camunda. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c bpmn-\u0444\u0430\u0439\u043b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0411\u041f \u0432 <a href=\"https:\/\/camunda.com\/download\/modeler\/\">camunda modeler<\/a> \u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0448\u0430\u0433 (\u0441\u043c. \u0440\u0438\u0441\u0443\u043d\u043e\u043a 3):<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0420\u0438\u0441\u0443\u043d\u043e\u043a 3. \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 (\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0442\u0430\u0441\u043a\u0430 \u201c\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u043a\u0443 \u0415\u041a\u0411\u0414 \u0441 ASTS) \u0432 camunda modeler\u201d   <\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u043c id = compare-offers-manual. \u042d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0411\u041f. <\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441 \u043f\u043e\u043b\u043b\u0438\u043d\u0433\u043e\u043c (<em>waitforprocess_activity<\/em>):<\/p>\n<pre><code class=\"python\">def wait_for_process_activity(     self,     process_instance_id: str,     *,     activity_name: Optional[str] = None,     activity_id: Optional[str] = None,     max_time: int = 30,     sleep_time: int = 2, ) -> None:     moex_asserts.assert_true(         expr=(activity_name or activity_id) and not (activity_name and activity_id),         msg='\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 [activity_name, activity_id]',     )     kwargs = (         {'activity_name': activity_name}         if activity_name else {'activity_id': activity_id}     )     with allure.step(         f'\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" '         f'\u0441 id \"{process_instance_id}\" \u0434\u043e\u0448\u0435\u043b \u0434\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 '         f'\"{activity_name or activity_id}\"',     ):         poll_by_time_first_success(             fn=lambda: self.find_process_activity(                 process_instance_id=process_instance_id,                 **kwargs,             ),             checker=lambda a: a is not None,             max_time=max_time,             sleep_time=sleep_time,             msg=(                 f'\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \"{self.pretty_name}\" \u0441 id \"{process_instance_id}\" '                 f'\u043d\u0435 \u0434\u043e\u0448\u0435\u043b \u0434\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \"{activity_id or activity_name}\"'             ),         )<\/code><\/pre>\n<p>\u0412 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0435\u0439 (<em>find_process_activity):<\/em><\/p>\n<pre><code class=\"python\">def find_process_activity(     self,     process_instance_id: str,     *,     activity_name: Optional[str] = None,     activity_id: Optional[str] = None, ) -> Optional[CamundaActivity]:     moex_asserts.assert_true(         expr=(activity_name or activity_id) and not (activity_name<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-426866","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/426866","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=426866"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/426866\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=426866"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=426866"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=426866"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}